使用子进程运行 bash 命令时,我可能会遇到命令无效的情况。在这种情况下,bash 将返回一条错误消息。我们怎样才能捕捉到这条消息呢?我想将此消息保存到日志文件中。以下是一个示例,我尝试在不存在的目录中列出文件。
try:
subprocess.check_call(["ls", "/home/non"])
df = subprocess.Popen(["ls", "/home/non"], stdout=subprocess.PIPE)
output, err = df.communicate()
# process outputs
except Exception as error:
print error
sys.exit(1)
Bash 会打印“ls:无法访问/home/non:没有这样的文件或目录”。我怎样才能得到这个错误信息? except 行捕获的错误明显不同,它说“Command ‘[‘ls’, ‘/home/non’]’ returned non-zero exit status 2”。
原文由 Luke 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以将 stderr 重定向到一个文件对象:
输出到log.txt:
如果您想要消息除外:
对于 python 2.6,
e.message
将不起作用。您可以使用 python 2.7 的类似版本check_output
将适用于 python 2.6: