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

2024-05-17 00:04:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

import subprocess

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

说到收尾,我尝试了不同的方法:

^{2}$

命令没有执行,所以对我无效。我也用psutil尝试了一个解决方案,但它也没有成功。。。在


Tags: toimportcmdinput进程图像文件时间ros
1条回答
网友
1楼 · 发布于 2024-05-17 00:04:09

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

尝试以字符串列表的形式传递参数(这样就不需要shell=True),稍等片刻,在Popen对象上使用terminate。您不需要进程组或psutil来终止进程及其子进程,只需在process对象上使用普通的terminate()就可以了。在

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.terminate()

请注意,proc.terminate()尝试优雅地退出,而{}只会终止进程(在Un*x系统下有区别,而不是在Windows下)

另一项呼吁是“除非是迫于枪口,否则不要使用shell=True”。在

相关问题 更多 >