在使用子进程运行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行捕获的错误显然是不同的,它说“命令'返回' ls ','/home/non ']'返回非零退出状态2”。
3条答案
按热度按时间oxf4rvwz1#
ls
命令生成的,这里不是bash
。如果你想使用异常处理来处理不存在的文件,那么使用
subprocess.check_output()
:字符串
输出
型
0pizxfdo2#
您可以将stderr重定向到文件对象:
字符串
输出到log.txt:
型
如果您希望在except中显示消息:
型
对于python 2.6,
e.message
将无法工作。您可以使用python 2.7的check_output
的类似版本,它将与python 2.6一起工作:型
xqnpmsa83#
根据
subprocess
文档,现在首选run
命令。范例:
字符串
正如其他人所提到的,如果你想保存到一个文件,你可以使用
stdout
参数到run
;但是,你也可以使用uselogging
to do that,然后在你的方法中记录错误。