try:
folderSizeInMB= int(subprocess.check_output('du -csh --block-size=1M', shell=True).decode().split()[0])
print('\t\tTotal download progress (MB):\t' + str(folderSizeInMB), end = '\r')
except Exception as e:
print('\t\tDownloading' + '.'*(loopCount - gv.parallelDownloads + 3), end = '\r')
我的脚本中有这段代码,因为由于某种原因,我的unix决定找不到'du'命令。它抛出一个错误/bin/sh: du: command not found
我对这段代码的希望是,即使我的程序遇到这个错误,它也只会在except
块中显示消息并继续运行。但是,它会在except
块中显示消息之前打印错误。为什么要这么做?有没有办法抑制try
块显示的错误消息
谢谢
编辑: 我重写代码后,收到如下所示的答案,它的工作。我只需要重写一行:
folderSizeInMB= int(subprocess.check_output('du -csh --block-size=1M', shell=True, stederr=subprocess.DEVNULL).decode().split()[0])
错误由shell显示,并打印到stderr。因为你没有重定向它的stderr,它只是直接进入你自己程序的stderr,然后进入你的终端
如果您不想使用这个或任何其他shell特性,那么最简单的解决方案就是不使用shell。传递一个参数列表而不是命令行,然后去掉这个
shell=True
,这个错误将变成一个普通的Python异常,您可以处理已有的代码如果只是出于某种原因使用shell,则需要重定向其stderr。您可以传递
stderr=subprocess.STDOUT
使其与您已经捕获的标准输出合并,或者传递subprocess.DEVNULL
使其忽略。subprocess
模块文档很好地解释了所有的选项,所以请阅读它们,决定您想要的行为,然后这样做您可以尝试将stderr重定向为null以防止显示错误
相关问题 更多 >
编程相关推荐