[英]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.