如何从子进程python 2.7和Apache中读取实时输出

时间:2015-05-04 08:47:21

标签: apache python-2.7 pipe subprocess ros

我有一个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/>")

1 个答案:

答案 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/>")