Как перенаправить stderr программы, запущенной с помощью os.system сторонней библиотекой python - PullRequest
2 голосов
/ 24 мая 2011

Я использую внешнюю библиотеку, как это:

from some_lib import runThatProgram

infile = '/tmp/test'
outfile = '/tmp/testout'
runThatProgram(infile, outfile)

, в то время как runThatProgram:

def runThatProgram(infile, outfile):
    os.system("%s %s > %s" % ('thatProgram', infile, outfile))

Проблема в том, что 'thatProgram' возвращает много вещей на STDERR, я хочуперенаправить его в файл, , но я не могу отредактировать runThatProgram код , потому что он находится в сторонней библиотеке lib!

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Чтобы проиллюстрировать то, что сказал Рош Оксиморон, вы можете взломать код следующим образом:

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), и все будет записано в ваш выходной файл.

0 голосов
/ 24 мая 2011

Чтобы подробнее узнать об использовании подпроцесса , вы можете открыть его, дать ему трубу и затем работать там, чтобы

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...