Есть два способа сделать перенаправление. Оба относятся к любому 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()
кажется очень ясным. Можете ли вы предоставить цитату или ссылку, чтобы мы знали, на что обратить внимание в ответе?