Я тестирую кусок кода Python, который использует subprocess.call(), поэтому я не могу контролировать этот вызов функции. Мне нужно сделать вывод из этого системного вызова для выполнения утверждений. Я попытался установить os.stdout для объекта StringIO, но это не отображает выходы системного вызова. Как решить эту проблему? Вот мой код до сих пор:Захват вывода из subprocess.call, что у меня нет контроля над
Код для тестирования (я не имею никакого контроля над этим):
def runFile(filename):
check_call("./" + filename)
Моя попытка захвата вывода системного вызова:
import StringIO
oldout = sys.stdout
try:
sys.stdout = StringIO.StringIO()
runFile("somefile")
output = sys.stdout.getvalue()
assert output == "expected-output"
finally:
sys.stdout = oldout
Мне нравится этот подход, но есть ли способ сделать текущий процесс не заблокированным, если есть много выходных данных? – Addison
Если вы не можете изменить вызов функции на 'check_call()', тогда нет. Если вы можете изменить его, вы можете либо дать ему 'stdout = subprocess.PIPE', либо опросить это' stdout' в другом потоке, или вы можете заменить это 'check_call()' на 'Popen',' stdout.read() 'на этом объекте и' wait() '. Но если вы не можете изменить, это единственный вариант (помимо исправления подпроцесса). – glglgl