如何重定向第三方Python库中os.system运行程序的stderr
我在使用一个外部库,像这样:
from some_lib import runThatProgram
infile = '/tmp/test'
outfile = '/tmp/testout'
runThatProgram(infile, outfile)
而这个程序的运行方式是:
def runThatProgram(infile, outfile):
os.system("%s %s > %s" % ('thatProgram', infile, outfile))
问题是,'thatProgram'
会在错误输出中返回很多信息,我想把这些信息重定向到一个文件里,但是我不能修改 runThatProgram
的 代码,因为它是在一个第三方库里!
2 个回答
0
为了更详细地说明如何使用 subprocess,你可以先打开它,然后给它一个管道,这样就可以从那里开始进行操作。
import subprocess
program = "runthatprogram.py".split()
process = subprocess.Popen(program, stdout = subprocess.PIPE, stderr = open('stderr','w')) #stderr to fileobj
process.communicate()[0] #display stdout
2
为了说明Rosh Oxymoron所说的内容,你可以这样修改代码:
from some_lib import runThatProgram
infile = '/tmp/test'
outfile = '/tmp/testout 2>&1'
runThatProgram(infile, outfile)
这样做的话,它会调用
thatProgram /tmp/test > /tmp/testout 2>&1
这段代码会把错误信息(stderr,编号2)重定向到标准输出(stdout,编号1),这样所有的信息都会记录在你的输出文件里。