[英]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.