Задача, о которой вы спрашиваете, заключается в том, как перенаправить стандартный вывод (stdout) и стандартную ошибку (stderr) подпроцесса Python в файл. Вот несколько методов, которые вы можете использовать:
Метод 1: использование модуля subprocessи перенаправления оболочки:
import subprocess
with open('output.txt', 'w') as f:
subprocess.call(['command', 'arg1', 'arg2'], stdout=f, stderr=subprocess.STDOUT)
Метод 2: использование модуля subprocessи subprocess.PIPE:
import subprocess
with open('output.txt', 'w') as f:
process = subprocess.Popen(['command', 'arg1', 'arg2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output, _ = process.communicate()
f.write(output.decode())
Метод 3. Использование модуля osи файловых дескрипторов:
import os
import subprocess
with open('output.txt', 'w') as f:
with open('error.txt', 'w') as e:
process = subprocess.Popen(['command', 'arg1', 'arg2'], stdout=f, stderr=e)
process.wait()
Метод 4. Использование модуля contextlibи redirect_stdout:
import contextlib
import subprocess
with open('output.txt', 'w') as f, contextlib.redirect_stdout(f):
subprocess.call(['command', 'arg1', 'arg2'])
Метод 5: использование команды tee(только UNIX-подобные системы):
import subprocess
with open('output.txt', 'w') as f:
subprocess.call("command arg1 arg2 | tee output.txt", shell=True)