2014-11-12 3 views
2

Я могу перенаправить вывод скрипта Python просто с символом «>» в ​​командной строке. Однако, если скрипт Python имеет subprocess.call(), порядок выходных строк пропущен.Python: перенаправленный порядок сообщений

test.py

import subprocess 

print("Message from Python... this should appear at 1st line") 
subprocess.call(r"c:\src\python\redirect2\hi.bat") 

hi.bat

@echo off 
echo Message from batch file. this should appear at 2nd line. 

Ниже сообщение я ожидаю.

C:\src\python\redirect2>\Python34\python.exe test.py 

Message from Python... this should appear at 1st line 
Message from batch file. this should appear at 2nd line. 

Однако, как только я перенаправляю его вывод, порядок этих строк был заменен.

C:\src\python\redirect2>\Python34\python.exe test.py > console.txt 

C:\src\python\redirect2>type console.txt 
Message from batch file. this should appear at 2nd line. 
Message from Python... this should appear at 1st line 

Кто-нибудь знает, как предотвратить это? Включение сна() не похоже на помощь. Я использую Windows 8.1.

ответ

1

вы должны использовать subprocess.Popen вместо этого, чтобы вы могли захватить вывод.

import subprocess 

print("Message from Python... this should appear at 1st line") 
p = subprocess.Popen("c:\src\python\redirect2\hi.bat", stdout=subprocess.PIPE) 
out, err = p.communicate() 

print out 
+0

спасибо. Это сработало! – Tony

+0

Я записал последнюю строку для печати (out.decode (encoding = 'UTF-8')). В противном случае конец строки не может отображаться правильно. – Tony

Смежные вопросы