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

Python 如何在shell中运行进程而不在shell上打印错误,python,Python,我试图运行这样一个过程: cmd = "qry_db -value x > /tmp/somefile" os.popen(cmd) 有时,qry_db返回一个错误,它是正常的。但是我不希望错误被打印在shell上,有什么方法可以做到这一点吗?在程序的开头写下这一点 import sys sys.stderr = open('error.log', 'w') 这将把所有错误写入文件error.log 或者,如果您根本不想在Unix系统上记录错误,请使用文件/dev/null sys.

我试图运行这样一个过程:

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

有时,qry_db返回一个错误,它是正常的。但是我不希望错误被打印在shell上,有什么方法可以做到这一点吗?

在程序的开头写下这一点

import sys

sys.stderr = open('error.log', 'w')
这将把所有错误写入文件
error.log

或者,如果您根本不想在Unix系统上记录错误,请使用文件
/dev/null

sys.stderr = open('error.log', 'w')
类似地,您可以使用
sys.stdout

不使用
os.popen()
将所有输出从终端发送出去。改用
子流程
模块:

import subprocess

with open('/tmp/somefile', 'w') as tmpfile:
    subprocess.call(['qry_db', '-value', 'x'], stdout=tmpfile, stderr=subprocess.DEVNULL)
这将
stderr
重定向到
/dev/null
,有效地消除错误
stdout
仍被重定向到临时文件。相反,您可能希望使用管道将输出直接读取到Python脚本中。您仍然可以使用
stderr=subprocess.DEVNULL
来消除错误输出

Python3.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)

我在这一行得到一个无效的语法错误:
用open('/tmp/somefile',w')作为tmpfile,open(os.devnull)作为devnull:`@user2234234:您使用的是Python 2.6还是更早版本?然后,不能将多个上下文管理器与一个
行一起使用。在这种情况下,使用嵌套的
语句:
和open(…)作为tmpfile:
(缩进下一行)
和open(os.devnull)作为devnull:
(再次缩进)。