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:
(再次缩进)。