2024-05-17 00:04:09 发布
网友
我需要在不同的时间保存模拟中的一些图像文件。所以我的想法是打开一个子进程保存一些图像文件并关闭它。在
import subprocess cmd = "rosrun pcl_ros pointcloud_to_pcd input:=camera/depth/points" proc = subprocess.Popen(cmd, shell=True)
说到收尾,我尝试了不同的方法:
命令没有执行,所以对我无效。我也用psutil尝试了一个解决方案,但它也没有成功。。。在
psutil
在这里您可能不需要shell=True,这就是您的问题所在。我怀疑,当您在第二个代码片段中杀死进程组时,shell进程会在您要运行的进程有机会启动之前被终止。。。在
shell=True
尝试以字符串列表的形式传递参数(这样就不需要shell=True),稍等片刻,在Popen对象上使用terminate。您不需要进程组或psutil来终止进程及其子进程,只需在process对象上使用普通的terminate()就可以了。在
Popen
terminate
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下)
proc.terminate()
另一项呼吁是“除非是迫于枪口,否则不要使用shell=True”。在
在这里您可能不需要
shell=True
,这就是您的问题所在。我怀疑,当您在第二个代码片段中杀死进程组时,shell进程会在您要运行的进程有机会启动之前被终止。。。在尝试以字符串列表的形式传递参数(这样就不需要
shell=True
),稍等片刻,在Popen
对象上使用terminate
。您不需要进程组或psutil
来终止进程及其子进程,只需在process对象上使用普通的terminate()
就可以了。在请注意,}只会终止进程(在Un*x系统下有区别,而不是在Windows下)
proc.terminate()
尝试优雅地退出,而{另一项呼吁是“除非是迫于枪口,否则不要使用
shell=True
”。在相关问题 更多 >
编程相关推荐