如何重定向第三方Python库中os.system运行程序的stderr

2 投票
2 回答
1613 浏览
提问于 2025-04-16 18:15

我在使用一个外部库,像这样:

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),这样所有的信息都会记录在你的输出文件里。

撰写回答