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

utugiqy6  于 2022-12-14  发布在  Apache
关注(0)|答案(2)|浏览(134)

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

mgdq6dx11#

问题是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/>")
dy1byipe

dy1byipe2#

Andrzej Pronobis上面的答案对于基于UNIX的系统来说已经足够了,但是在某些特定的场景中,pexpect包在Windows中的工作效率并不像人们所期望的那样高。在这里,spawn()并不像人们所期望的那样在Windows中工作。我们仍然可以在官方文档中看到的一些修改后使用它。
这里更好的方法可能是使用wexpect(官方文档here)。它只适合Windows

相关问题