Я запускаю подпрограмму с помощью subprocess.popen. Когда я запускаю свою программу Python из командного окна (cmd.exe), программа пишет некоторую информацию и даты в окне, поскольку программа развивается.
Когда я выполняю свой код Python не в командном окне, он открывает новое командное окно для вывода этой подпрограммы, и я хочу избежать этого. Когда я использовал следующий код, он не показывает cmd окно, но он также не печатает состояние:
p = subprocess.Popen("c:/flow/flow.exe", shell=True, stdout=subprocess.PIPE)
print p.stdout.read()
Как я могу показать вывод подпрограммы в выводе своей программы, как это происходит?
Используйте это:
cmd = subprocess.Popen(["c:/flow/flow.exe"], stdout=subprocess.PIPE)
for line in cmd.stdout:
print line.rstrip("\n")
cmd.wait() # you may already be handling this in your current code
Обратите внимание, что вам все равно придется ждать, пока подпрограмма очистит свой буфер stdout (который обычно буферизуется по-разному, когда не выполняется запись в окно терминала), поэтому вы не можете сразу увидеть каждую строку поскольку подпрограмма распечатывает его (это зависит от различных деталей ОС и деталей подпрограммы).
Также обратите внимание, как я удалил shell = True и заменил строковый аргумент списком, что обычно рекомендуется.