从python脚本运行外部交互程序

从python脚本运行外部交互程序,python,external,Python,External,我有一个python脚本,它试图执行外部程序。 我的项目涉及一个pythontalkbot,通过它,客户端应该能够在远程终端中执行命令 所以基本上,包含talk机器人的模块只允许我获取输入和发送输出。我需要获取输入,看看它是否是一个终端命令并执行它 所以我使用subprocess.Popen对象来实现这一点 问题是,如果命令调用的程序是交互式的,即等待输入并给出输出,我就无法处理它。在最好的情况下,Popen等待所有输入,然后给出输出 有没有办法做到这一点,即启动一个外部程序,发送输入,获取输出

我有一个python脚本,它试图执行外部程序。 我的项目涉及一个pythontalkbot,通过它,客户端应该能够在远程终端中执行命令

所以基本上,包含talk机器人的模块只允许我获取输入和发送输出。我需要获取输入,看看它是否是一个终端命令并执行它

所以我使用subprocess.Popen对象来实现这一点

问题是,如果命令调用的程序是交互式的,即等待输入并给出输出,我就无法处理它。在最好的情况下,Popen等待所有输入,然后给出输出


有没有办法做到这一点,即启动一个外部程序,发送输入,获取输出;发送输入、获取输出等等。

在我看来,解决此类问题的最佳模型是使用异步单线程方法,但它需要的代码即使使用帮助库也有点复杂

概念上更简单的是使用多线程方法

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)


根据您的程序的复杂程度,这可能是一个合理的解决方案。请注意,经过一定程度的并行执行和逻辑复杂性后,多线程方法显示出一些缺点(复杂且难以调试锁定逻辑)

可能正是您所需要的。

此解决方案或多或少适合我的需要。