Есть два способа сделать перенаправление. Оба относятся к любому subprocess.Popenили subprocess.call.
Установите ключевое слово аргумент shell = Trueили executable = /path/to/the/shellи укажите команду так, как она у вас есть.
Поскольку вы просто перенаправляете вывод в файл, установите аргумент ключевого слова
stdout = an_open_writeable_file_object
где объект указывает на outputфайл.
subprocess.Popenявляется более общим, чем subprocess.call.
Popenне блокирует, позволяя вам взаимодействовать с процессом во время его работы или продолжать заниматься другими вещами в вашей программе на Python. Вызов Popenвозвращает Popenобъект.
call делает блок. Несмотря на то, что он поддерживает все те же аргументы, что и Popenконструктор, вы все равно можете установить выходные данные процесса, переменные среды и т. Д., Но ваш сценарий ожидает завершения программы и callвозвращает код, представляющий состояние выхода процесса.
returncode = call(*args, **kwargs)
в основном то же самое, что звонить
returncode = Popen(*args, **kwargs).wait()
callэто просто удобная функция. Его реализация в CPython находится в subprocess.py :
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
Как видите, вокруг него тонкая обертка Popen.
call()кажется очень ясным. Можете ли вы предоставить цитату или ссылку, чтобы мы знали, на что обратить внимание в ответе?