我正在尝试运行这样的流程:
cmd = "qry_db -value x > /tmp/somefile"
os.popen(cmd)
有时候,qry_db会返回错误,没关系。但我不希望错误打印在shell上,有没有办法做到这一点?
答案 0 :(得分:2)
请勿使用os.popen()
。请改用subprocess
模块:
import subprocess
with open('/tmp/somefile', 'w') as tmpfile:
subprocess.call(['qry_db', '-value', 'x'], stdout=tmpfile, stderr=subprocess.DEVNULL)
这会将stderr
重定向到/dev/null
,从而有效地消除错误。 stdout
仍会重定向到您的临时文件。 可能希望使用subprocess.check_output()
来管道输入,直接将输出读入Python脚本。您仍然使用stderr=subprocess.DEVNULL
来消除错误输出。
subprocess.DEVNULL
。如果您使用的是早期版本的Python,请使用:
import subprocess
import os
with open('/tmp/somefile', 'w') as tmpfile, open(os.devnull) as devnull:
subprocess.call(['qry_db', '-value', 'x'], stdout=tmpfile, stderr=devnull)
答案 1 :(得分:0)
在程序的开头写下这个。
import sys
sys.stderr = open('error.log', 'w')
这会将您的所有错误写入文件error.log
。
或者如果您根本不想记录错误,请在Unix系统上使用文件/dev/null
sys.stderr = open('error.log', 'w')
类似地,您可以使用sys.stdout