try/except 显示错误但我不希望它出现
try/except showing error but I don't want it to
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])
您可以尝试将 stderr 重定向为 null 以防止错误显示。
import sys
class DevNull:
def write(self, msg):
pass
sys.stderr = DevNull()
shell 显示错误,打印到 stderr。因为你没有重定向它的标准错误,它只是直接进入你自己程序的标准错误,然后进入你的终端。
如果您不想要此功能或任何其他 shell 功能,那么最简单的解决方案就是不使用 shell。传递参数列表而不是命令行,并摆脱那个 shell=True
,错误将变成一个正常的 Python 异常,您可以使用已有的代码处理它。
如果您出于某种原因只是使用 shell,则需要重定向其标准错误。您可以传递 stderr=subprocess.STDOUT
以使其与您已经捕获的标准输出合并,或传递 subprocess.DEVNULL
以忽略它。 subprocess
模块文档很好地解释了所有选项,因此请阅读它们,决定您想要的行为,然后执行。
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])
您可以尝试将 stderr 重定向为 null 以防止错误显示。
import sys
class DevNull:
def write(self, msg):
pass
sys.stderr = DevNull()
shell 显示错误,打印到 stderr。因为你没有重定向它的标准错误,它只是直接进入你自己程序的标准错误,然后进入你的终端。
如果您不想要此功能或任何其他 shell 功能,那么最简单的解决方案就是不使用 shell。传递参数列表而不是命令行,并摆脱那个 shell=True
,错误将变成一个正常的 Python 异常,您可以使用已有的代码处理它。
如果您出于某种原因只是使用 shell,则需要重定向其标准错误。您可以传递 stderr=subprocess.STDOUT
以使其与您已经捕获的标准输出合并,或传递 subprocess.DEVNULL
以忽略它。 subprocess
模块文档很好地解释了所有选项,因此请阅读它们,决定您想要的行为,然后执行。