Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试/除了显示错误,但我不';我不想这样_Python_Unix_Exception Handling - Fatal编程技术网

Python 尝试/除了显示错误,但我不';我不想这样

Python 尝试/除了显示错误,但我不';我不想这样,python,unix,exception-handling,Python,Unix,Exception Handling,我的脚本中有这段代码,因为出于某种原因,我的unix决定找不到'du'命令。它抛出一个错误/bin/sh:du:command not found 我对这段代码的希望是,即使我的程序遇到了这个错误,它也只会在块中显示消息,而不显示块并继续运行。但是,在块中显示消息之前,它会打印错误,但块除外。它为什么这样做?是否有办法抑制try块显示的错误消息 谢谢 编辑: 在收到如下所示的答案后,我重新编写了代码,代码运行正常。我只需要重写一行: try: folderSizeInMB= int(su

我的脚本中有这段代码,因为出于某种原因,我的unix决定找不到'du'命令。它抛出一个错误
/bin/sh:du:command not found

我对这段代码的希望是,即使我的程序遇到了这个错误,它也只会在
块中显示消息,而不显示
块并继续运行。但是,在
块中显示消息之前,它会打印错误,但
块除外。它为什么这样做?是否有办法抑制
try
块显示的错误消息

谢谢

编辑: 在收到如下所示的答案后,我重新编写了代码,代码运行正常。我只需要重写一行:

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')

您可以尝试将stderr重定向为null,以防止显示错误

folderSizeInMB= int(subprocess.check_output('du -csh --block-size=1M', shell=True, stederr=subprocess.DEVNULL).decode().split()[0])

您可以尝试将stderr重定向为null,以防止显示错误

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
以使其与已捕获的STDOUT合并,或者传递
subprocess.DEVNULL
以忽略它。
子流程
模块文档很好地解释了所有选项,因此请阅读它们,决定您想要的行为,然后执行该操作。

错误由shell显示,并打印到stderr。因为你没有重定向它的stderr,它只是直接进入你自己程序的stderr,然后进入你的终端

如果您不想要这个或任何其他shell特性,那么最简单的解决方案就是不使用shell。传递一个参数列表而不是命令行,然后去掉这个
shell=True
,这个错误将成为一个普通的Python异常,您可以用已有的代码处理它


如果只是出于某种原因使用shell,则需要重定向其stderr。您可以传递
stderr=subprocess.STDOUT
以使其与已捕获的STDOUT合并,或者传递
subprocess.DEVNULL
以忽略它。
子流程
模块文档很好地解释了所有选项,因此请阅读它们,决定您想要的行为,然后执行该操作。

为什么在这里使用
shell=True
?这就是问题的原因,解决问题的简单方法就是消除这个原因。在我的公司Unix设置中,由于某种原因,我在设置shell=False时遇到了各种各样的问题,并且必须在列表中而不是字符串中提供命令。为什么在这里使用
shell=True
?这就是问题的原因,解决问题的简单方法就是消除这个原因。在我的公司Unix设置中,由于某种原因,我在设置shell=False时遇到了各种各样的问题,并且必须在列表中而不是字符串中提供命令。有内置的实用程序可以更优雅地执行此操作,包括子流程的参数有内置的实用程序,可以更优雅地执行此操作,包括子流程的参数谢谢您的回答,我现在看到了我的错误。我重新编写了代码,将子流程stderr重定向到devnull,并按预期工作。我编辑了我的问题,以向将来需要它的任何人显示我的工作代码。感谢您的回答,我现在看到了我的错误。我重新编写了代码,将子流程stderr重定向到devnull,并按照预期工作。我编辑了我的问题,以向将来需要它的任何人显示我的工作代码。