У меня есть команда, которая прекрасно работает в командной строке. У этого есть много аргументов как cmd --thing foo --stuff bar -a b input output
Я хочу запустить это из python и заблокировать ожидание его завершения. Поскольку скрипт печатает вещи в stdout
и stderr
, я хочу, чтобы он был немедленно показан пользователю.
Какой модуль подходит для этого?
Я пробовал:
import commands
output = commands.getoutput("cmd --thing foo --stuff bar -a b input output")
print output
это прекрасно работает, за исключением того, что stdout
не возвращается до конца.
import os
os.system("cmd --thing foo --stuff bar -a b input output")
выводит все выходные данные, когда cmd фактически завершен.
import subprocess
subprocess.call(["cmd", "--thing foo", "--stuff bar", "-a b", "input", "output"])
это неправильно передает параметры (я не смог найти точную проблему, но cmd
отклоняет мои данные). Если в качестве первого параметра указать echo
, он выведет команду, которая отлично работает, когда я вставляю ее непосредственно в терминал.
import subprocess
subprocess.call("cmd --thing foo --stuff bar -a b input output")
точно так же, как указано выше.