2013-09-12 4 views
0

В моем проекте я запускаю файл .bat из сценария python. Так же, как это:Как я могу превзойти «Нажмите любую клавишу, чтобы продолжить ...» в python?

os.system("testfile.bat") 

Когда `testfile.bat закончена она заканчивается быстрой Press any key to continue .... Я бы хотел, чтобы мой скрипт python превзошел эту подсказку и каким-то образом имитировал нажатие клавиши.

Как я могу это достичь? Я уже реализовал эту функцию, используя подпроцесс, но, как оказалось, подпроцесс не подходит для контекста моего проекта (что-то связано с печатью на консоли). Есть идеи?

+1

означает «testfile.bat» есть 'pause' в конце? –

+0

да это имеет. почему ?? – user2426316

+1

в' паузы 'дает сообщение« Нажмите любую клавишу, чтобы продолжить ... ». Просто удалите' pause' из командного файла. –

ответ

1

Использование модуля subprocess является всегда подходит и соответствует os.system.

Вобще

sp = subprocess.Popen("testfile.bat", stdin=subprocess.PIPE) 
sp.stdin.write("\r\n") # send the CR/LF for pause 
sp.stdin.close() # close so that it will proceed 

и вы должны сделать.

+0

Это предполагается, что 'testfile.ba t' не имеет других программ, которые читают стандартный ввод. OP не говорит, что 'testfile.bat' не является интерактивным. –

+0

@ Robᵩ Хм, это так. Но я не вижу другого тривиального способа сделать это ... – glglgl

0

Добавить >nul к концу паузы воздает (в пакетном файле.) Не будет печатать «Нажмите любую клавишу для продолжения.

0

Если у вас есть„пауза“в конце файла Bat просто удалить он, она будет продолжать выполнение остального питона сценария после того, как подпроцесс делается.

p = subprocess.Popen("testfile.bat", shell=False, \ 
          cwd=path_to_exe) 

p.wait() 
Смежные вопросы