【发布时间】:2015-08-06 10:13:16
【问题描述】:
我在 python 中使用 subprocess 模块同时运行两个进程:
p_topic = subprocess.Popen(['rostopic','echo','/msg/address'], stdout=PIPE)
p_play = subprocess.Popen(['rosbag','play',bagfile_path])
这些是ROS 进程:p_topic 侦听要播放的.bag 文件并将该.bag 文件中的某些信息输出到标准输出流;然后,我想使用 p_topic.stdout 对象(其行为类似于文件)访问此输出。
但是,我发现p_topic.stdout 对象仅包含它应该具有的前~1/3 的输出行——也就是说,与手动运行这两个命令相比,同时在两个shell 中并排一边。
我尝试等待几秒钟以完成输出,但这并没有改变任何东西,它与p_topic.stdout 每次捕获的行数大致相同。任何有关这可能是什么的提示将不胜感激!
编辑:
阅读代码如下:
#wait for playing to stop
while p_play.poll() == None:
time.sleep(.1)
time.sleep(X)#wait for some time for the p_topic to finish
p_topic.terminate()
output=[]
for line in p_topic.stdout:
output.append(line)
请注意 time.sleep(X) 中的值 X 没有任何区别
【问题讨论】:
-
您的进程是否终止?在做最后一个
read之前,你是waiting 吗?您应该显示阅读代码 -
另外,你可能想使用
check_output,它会让事情变得更容易 -
你确定它不等待任何输入吗?从终端运行时它不等待任何输入?
-
你让自己过得很辛苦,你用的是什么版本的python?
-
你确定你的输出是纯标准输出吗?也许有些东西会进入标准错误?
标签: python subprocess stdout popen ros