Я думаю, что, по крайней мере, часть проблемы в том, как вы выполняете командный файл.Попробуйте:
# execute the batch file as a separate process and echo its output
Popen_kwargs = { 'stdout': subprocess.PIPE, 'stderr': subprocess.STDOUT,
'universal_newlines': True }
with subprocess.Popen('hlm '+commands, **Popen_kwargs).stdout as output:
for line in output:
print line,
Это передает различные аргументы Popen
- разница состоит в том, что эта версия удаляет shell=True
, который не нужен для пакетного файла, устанавливает stderr=subprocess.STDOUT
, который перенаправляетstdout
в том же месте, куда собирается stdout, чтобы не пропустить ни одного сообщения об ошибке, и добавляет universal_newlines=True
, чтобы сделать вывод более читабельным.
Другое отличие заключается в том, что он читает и печатает вывод из Popen
процесс, который фактически заставит скрипт Python, выполняющий пакетный файл, дождаться его завершения, прежде чем продолжить - что я подозреваю, важно.