我有一个Apache Web服务器,我制作了一个python脚本来运行一个命令。我正在运行的命令是启动一个ROS启动文件,这是无限期工作。我想从子进程现场读取输出,并显示在页面上。与我的代码到目前为止,我只能设法使输出打印后,我终止了进程。我'我试过网上各种各样的解决方案,但似乎都不管用
command = "roslaunch package test.launch"
proc = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
env=env,
shell=True,
bufsize=1,
)
print "Content-type:text/html\r\n\r\n"
for line in iter(proc.stdout.readline, ''):
strLine = str(line).rstrip()
print(">>> " + strLine)
print("<br/>")
2条答案
按热度按时间mgdq6dx11#
问题是
roslaunch
的输出被缓冲了。在这种情况下,subprocess
不是实时输出处理的最佳工具,但是Python中有一个完美的工具可以完成这个任务:pexpect
。下面的代码段应该可以做到这一点:dy1byipe2#
Andrzej Pronobis上面的答案对于基于UNIX的系统来说已经足够了,但是在某些特定的场景中,
pexpect
包在Windows中的工作效率并不像人们所期望的那样高。在这里,spawn()并不像人们所期望的那样在Windows中工作。我们仍然可以在官方文档中看到的一些修改后使用它。这里更好的方法可能是使用
wexpect
(官方文档here)。它只适合Windows。