2013-06-25 4 views
1

Я пытаюсь запустить команду exe из Python при передаче в параметрах. Я рассмотрел несколько других вопросов, и причина, по которой мой вопрос отличается, состоит в том, что я сначала хочу вызвать программу cmd exe, передавая некоторые параметры, тогда мне нужно ждать 10 секунд, чтобы exe запросил меня для некоторых имя пользователя, а затем пароль. то я хочу передать этот вывод в файл.Вызов команды exe с python

Так есть способ передать больше аргументов, если процесс уже вызван ранее? Как заставить cmd exe оставаться открытым, потому что, как только я его назову, процесс умирает.

Благодаря

ответ

1

Взгляните на подпроцесс общения и примеры труб.

+0

конкретно 'subprocess.Popen()' –

1

Вот пример (первый я должен был создать простой питон приложение, которое потребовалось некоторое время, чтобы задать для ввода (6 секунд в данном примере) под названием wait.py

wait.py

import time 

print "Sample Waiting App (waiting 6 seconds)" 
time.sleep(6) 
name = raw_input("Enter a Name: ") 
print "Hello", name 

Вот код для запуска, подождите, проходит ввод и вывод чтения:

automator.py

from subprocess import Popen, PIPE, STDOUT 

p = Popen(['python', 'wait.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT) 
print p.communicate('Jason\n')[0] 

А вот ломаются, что происходит:

  1. subprocess.Popen() создает процесс (работает интерпретатор питона и проходящее сценарий wait.py в качестве аргумента) и назначен p. Первоначально у меня был automator.py сон в течение 10 секунд (давая wait.py достаточно времени, чтобы очистить его таймер), но как @ J.F.Sebastian указал, что этот сон не нужен. Причина заключается в том, что вызов «communication()» будет заблокирован до завершения wait.py. Также потому, что wait.py читается из stdin, вы можете на самом деле заполнить stdin до содержимого wait.py. Это верно для любого приложения, которое читает из потока stdin.
  2. Затем строка 'Jason\n' отправляется процессу через p.communicate('Jason\n')[0], и вывод печатается. Обратите внимание, что stdout показывает приглашение и вывод оператора wait.py print, но не вход, это связано с тем, что вход не находится в потоке stdout при его вводе, он эхом.
+1

1. Не нужно использовать оба '.write()' и '.communicate()' здесь. Объедините оба: 'print p.communicate (b" Jason ") [0],' ('p.stdin.close()' вызывается внутри 'communication()' автоматически) 2. 'time.sleep (10)' is ненужным. – jfs

+0

Спасибо за помощь, я обновил свой ответ (и вытащил много ненужных объяснений). –

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