繁体   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