我有一个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/>")
答案 0 :(得分:0)
问题是roslaunch
的输出正在缓冲。在这种情况下,subprocess
不是实时输出处理的最佳工具,但在Python中只有完成该任务的完美工具:pexpect
。以下代码片段可以解决这个问题:
import pexpect
command = "roslaunch package test.launch"
p = pexpect.spawn(command)
print "Content-type:text/html\r\n\r\n"
while not p.eof():
strLine = p.readline()
print(">>> " + strLine)
print("<br/>")