2011-07-17 111 views
0

我有一個試圖執行外部程序的python腳本。 我的項目涉及一個python談話機器人,客戶端應該能夠在遠程終端中執行命令。從python腳本運行外部交互式程序

所以基本上結合了談話機器人的模塊允許我只得到輸入併發送output.I需要採取的輸入,看看它是否是一個終端的命令並執行它。

所以我用了subprocess.Popen對象來實現這一點。

的問題是,如果命令調用程序,它是互動的,即。等待輸入並給出輸出,我無法處理它。在最好的情況下,Popen等待所有輸入,然後輸出結果。

有沒有辦法做到這一點,即。啓動外部程序併發送輸入,獲取輸出;發送輸入,獲取輸出等。

回答

0

pexpect可能是你所需要的。

+0

這個解決方案或多或少符合我的需求。 – Hashken

0

在我看來對於這類問題的最佳模型是使用異步單線程技術,但它需要的代碼是有點複雜,即使使用幫助圖書館。

東西概念性簡單的是使用一個多線程的方法

import thread 
import sys 
import time 

def repl(): 
    while True: 
     print ">>> ", 
     sys.stdout.flush() 
     s = raw_input() 
     exec s 

def main_thread(): 
    for i in xrange(30): 
     print i 
     time.sleep(1) 

thread.start_new_thread(repl,()) 
main_thread() 

的在上面的代碼中的函數repl等待輸入,然後無論是在提示輸入高層,但在同一時間主程序是運行(這裏沒有做任何有趣的事情,只計算到30)。

取決於是多麼複雜程序這可能是一個合理的解決方案。需要注意的是並行執行和邏輯的複雜性一定程度後,多線程的方式顯示(複雜,難以調試鎖定邏輯)的一些缺點