如何在shell中运行进程而不在shell上打印错误

时间:2013-11-28 12:21:22

标签: python

我正在尝试运行这样的流程:

cmd = "qry_db -value x > /tmp/somefile"
os.popen(cmd)

有时候,qry_db会返回错误,没关系。但我不希望错误打印在shell上,有没有办法做到这一点?

2 个答案:

答案 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来消除错误输出。

在Python 3.3中添加了

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

将所有输出发送到终端