我正在嘗試使用subprocess
模塊與使用Python的命令行聊天機器人進行通信。 (http://howie.sourceforge.net/使用編譯的win32二進制文件,我有我的理由!)Python子進程交互,爲什麼我的進程與Popen.communicate協同工作,但不是Popen.stdout.read()?
這工作:
proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
output = proc.communicate()
但Popen.communicate
等待進程結束(並將其發送EOF ?),我希望能夠與它互動。這樣做的明顯的解決方案是讀stdout
/寫stdin
像這樣:
這不起作用:
proc = Popen('Howie/howie.exe', stdout=PIPE,stderr=STDOUT,stdin=PIPE)
while True: print proc.stdout.readline()
(請注意,我實際上使用基於http://code.activestate.com/recipes/440554/更復雜的代碼,但問題是相同)
問題是,第二種方法完美地用於與cmd通信,但是當我運行chatbot時,什麼也沒有。所以我的問題是,這是不同的捕獲輸出使用Popen.communicate()?
即我可以使用第二種方法來按照正常情況使用命令行,直到我運行chatbot,此時我停止接收輸出。使用第一種方法正確顯示機器人的前幾行輸出,但是我無法與之交互。
爲什麼感謝你,關閉stdin讓chatbot開始完全按照'Popen.communicate'所做的那樣,儘管現在我有一個問題需要我能夠繼續和它交談...... – SudoNhim 2012-03-12 20:52:45
也許你的應用程序正在閱讀行在這種情況下,您可以發送單行讓它回覆?你試圖完成的確切任務是什麼? – vmalloc 2012-03-12 20:57:49
但是一旦stdin被關閉,我怎麼才能發送它呢? 我希望能夠一行一行地提交和接收 – SudoNhim 2012-03-12 21:00:26