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

2024-04-20 00:41:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有时,qry\u db会返回一个错误,这是正常的。但我不想把错误印在外壳上,有什么办法吗?你知道吗


Tags: cmddbvalueos过程错误外壳tmp
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仍重定向到临时文件。您可能希望使用^{}将输出直接读入Python脚本,而不是通过管道来实现。您仍然可以使用stderr=subprocess.DEVNULL来消除错误输出。你知道吗

subprocess.DEVNULL是在python3.3中添加的。如果您使用的是早期版本的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)

把这个写在程序的开头。你知道吗

import sys

sys.stderr = open('error.log', 'w')

这会将所有错误写入文件error.log。你知道吗

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

sys.stderr = open('error.log', 'w')

同样,您可以使用sys.stdout将所有输出从终端发送出去

相关问题 更多 >