从python脚本运行外部交互程序
我有一个python脚本,它试图执行外部程序。 我的项目涉及一个pythontalkbot,通过它,客户端应该能够在远程终端中执行命令 所以基本上,包含talk机器人的模块只允许我获取输入和发送输出。我需要获取输入,看看它是否是一个终端命令并执行它 所以我使用subprocess.Popen对象来实现这一点 问题是,如果命令调用的程序是交互式的,即等待输入并给出输出,我就无法处理它。在最好的情况下,Popen等待所有输入,然后给出输出从python脚本运行外部交互程序,python,external,Python,External,我有一个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)
根据您的程序的复杂程度,这可能是一个合理的解决方案。请注意,经过一定程度的并行执行和逻辑复杂性后,多线程方法显示出一些缺点(复杂且难以调试锁定逻辑)可能正是您所需要的。此解决方案或多或少适合我的需要。