繁体   English   中英

打开一个进程,Popen无法关闭它(需要在cmd中运行Ros命令)

[英]Opens a process with Popen cant close it ( need to run Ros command in cmd)

我需要在不同的时间从模拟中保存一些图像文件。 所以我的想法是打开一个子进程保存一些图像文件并关闭它。

import subprocess

cmd = "rosrun pcl_ros pointcloud_to_pcd input:=camera/depth/points"
proc = subprocess.Popen(cmd, shell=True)

关闭,我尝试了不同的东西:

import os
import signal
import subprocess

cmd = "rosrun pcl_ros pointcloud_to_pcd input:=camera/depth/points"
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
                       shell=True, preexec_fn=os.setsid) 

os.killpg(os.getpgid(pro.pid), signal.SIGTERM)

命令没有执行,所以它对我不起作用。 我也试过用psutil的解决方案, psutil不起作用......

你可能不需要shell=True ,这是你问题的原因。 我怀疑当你在你的第二个片段中杀死进程组时,shell进程你想要运行的进程有机会启动之前被终止...

尝试将参数作为字符串列表传递(因此您不需要shell=True ),稍等一下,并在Popen对象上使用kill 你不需要进程组,或者psutil来杀死进程及其子进程,只需要在进程对象上使用普通的old kill()就可以了。

cmd = ["rosrun","pcl_ros","pointcloud_to_pcd","input:=camera/depth/points"]
proc = subprocess.Popen(cmd)
time.sleep(1)  # maybe needed to wait the process to do something useful
proc.kill()

编辑:似乎这个“在黑暗中拍摄”工作。 另一个请求“不要使用shell=True除非在枪口下强迫”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM