2013-02-26 50 views
1

我們正在嘗試創建一個python腳本來通過windows shell提示符來安裝應用程序,執行我們的python腳本。我們已經從APP.EXE輸出提示,指示 「並按回車鍵繼續......」按python腳本輸入

我們試圖模擬輸入關鍵,但它不工作。提示符仍然沒有移動到下一個嚮導步驟。

我們如何克服這個問題?

import subprocess 
import win32console 

APP_BIN = 'app.exe' 

def main(): 
    proc = subprocess.Popen([APP_BIN,'-i','console'],stdin=subprocess.PIPE, 
                stdout=subprocess.PIPE) 
    proc.stdin.write("\r\n")   <--- issue 
    output = proc.stdout.readline()  <--- issue 
    print output 
    ret = proc.wait() 
    print ret 

if __name__ == '__main__': 
    main() 
+0

'proc.stdin'很可能緩衝。如果是這樣,您需要執行'proc.stdin.flush()'以確保該進程已收到您發送的所有字符。我不知道這是否能解決您的問題。 – 2013-02-26 23:43:33

回答

3

不完全知道如何在python中做到這一點,但我的建議是模擬一個真正的'enter'鍵按命令。在你的代碼中,你只是改變脫字符的位置而不發出正確的回報。

看一看這樣的:http://win32com.goermezer.de/content/view/136/254/

import win32com.client 
shell = win32com.client.Dispatch("WScript.Shell") 
shell.SendKeys("{ENTER}", 0) 

好像這正是你需要的。

+0

添加一個小代碼示例,它將成爲我的+1,以防鏈接死亡。 – Serdalis 2013-02-26 23:07:56

+0

已添加示例代碼。 – ZorleQ 2013-02-26 23:12:21

+0

嗨佐爾感謝迴應;我試過了,仍然有相同的效果,沒有捕捉到Enter鍵 – chz 2013-02-27 00:06:14

0

以下可能工作(未經測試):

import subprocess 
import win32console 

APP_BIN = 'app.exe' 

def main(): 
    proc = subprocess.Popen([APP_BIN,'-i','console'],stdin=subprocess.PIPE, 
                stdout=subprocess.PIPE) 
    stdoutdata, stderrdata = proc.communicate(input="\r\n") 
    output = stdoutdata.readline() 
    print output 
    ret = proc.wait() 
    print ret 

if __name__ == '__main__': 
    main() 
+0

嗨馬蒂諾感謝您的迴應。它不起作用 - 仍然是同樣的效果;沒有看到Enter鍵進入下一個嚮導步驟。 – chz 2013-02-27 00:08:57

+0

要壞。這可能是該應用程序不讀取標準輸入,在這種情況下,您可能需要使用其他PyWin32模塊來做你想做的事情。嘗試使用谷歌搜索窗口模擬鍵盤輸入。有一種叫做[pywinauto]的東西(http://pywinauto.googlecode.com/hg/pywinauto/docs/index.html),可能也適用於控制檯應用程序。 – martineau 2013-02-27 00:38:47

+0

嗯,這[回答](http://stackoverflow.com/a/723724/355230)可能會有所幫助。 – martineau 2013-02-27 00:56:38