2013-06-25 66 views
1

我想在傳遞參數時從Python運行命令exe。我看了一些其他問題,而我的問題不同的原因是因爲我首先想要在傳遞某些參數時調用cmd exe程序,然後我必須等待10秒才能提示我輸入一些參數用戶名,然後一些密碼。那麼我想把這個輸出輸出到一個文件中。使用python調用命令exe

那麼,有沒有辦法通過更多的參數,如果一個進程已事先叫什麼名字? 如何使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 
一個簡單的Python應用程序

下面是代碼開始,等待,通過輸入和輸出讀:

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()創建一個進程(運行Python解釋器和傳遞wait.py腳本作爲參數)並分配給p最初我有automator.py睡眠10秒(給wait.py足夠的時間來清除它的計時器),但作爲@ J.F.Sebastian指出,這種睡眠是不必要的。原因是呼叫'溝通()'將阻塞,直到wait.py完成。另外,因爲wait.py是從stdin讀取的,所以你可以在wait.py讀取它之前填寫stdin的內容。任何從stdin流中讀取的應用程序都是如此。
  2. 然後字符串'Jason\n'通過p.communicate('Jason\n')[0]發送到進程,並打印輸出。請注意,stdout顯示wait.py打印語句的提示和輸出,但不顯示輸入,這是因爲鍵入它時輸入不在stdout流中,而是被回顯。
+1

1.無需同時使用'.WRITE()'和'.communicate()'這裏。結合使用:'print p.communicate(b「Jason」)[0],'('p.stdin.close()'在'communic()'裏自動調用)2.'time.sleep(10)'是不必要。 – jfs

+0

感謝您的幫助,我已經更新了我的答案(並剔除了很多不必要的解釋。) –