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