作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当使用子进程运行 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: cannot access/home/non: No such file or directory”。我怎样才能得到这个错误信息? except 行捕获的错误明显不同,它说“Command '['ls', '/home/non']' returned non-zero exit status 2”。
最佳答案
"ls: cannot access/home/non: No such file or directory" 是由 ls
命令生成的,不是 bash
在这里。
如果您想使用异常处理来处理不存在的文件,请使用 subprocess.check_output()
:
#!/usr/bin/env python
from subprocess import check_output, STDOUT, CalledProcessError
try:
output = check_output(['ls', 'nonexistent'], stderr=STDOUT)
except CalledProcessError as exc:
print(exc.output)
else:
assert 0
ls: cannot access nonexistent: No such file or directory
关于python - 如何将子进程命令的错误消息保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29580663/
我是一名优秀的程序员,十分优秀!