簡體   English   中英

從 python 腳本運行外部交互式程序

[英]Running an external interactive program from a python script

我有一個 python 腳本,它試圖執行外部程序。 我的項目涉及一個 python 對話機器人,客戶端應該能夠通過它在遠程終端中執行命令。

所以基本上包含談話機器人的模塊只允許我獲取輸入並發送 output。我需要接受輸入並查看它是否是終端命令並執行它。

所以我使用了 subprocess.Popen object 來實現這個。

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

有沒有辦法正確地做到這一點,即。 啟動外部程序並發送輸入,得到output; 發送輸入,得到 output 等。

在我看來,解決此類問題的最佳 model 是使用異步單線程方法,但即使使用幫助庫,它也需要有點復雜的代碼。

概念上更簡單的是使用多線程方法

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()

在上面的代碼中,function repl等待輸入,然后執行在提示符下輸入的任何內容,但同時主程序正在運行(這里它沒有做任何有趣的事情,只是數到 30)。

根據您的程序的復雜程度,這可能是一個合理的解決方案。 請注意,在一定程度的並行執行和邏輯復雜性之后,多線程方法顯示出一些缺點(復雜且難以調試鎖定邏輯)

pexpect可能是您需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM