在Python中终止启动的Popen子进程

2024-04-19 03:44:29 发布

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

我在Windows上,正在使用subprocess.Popen启动一个新进程,希望在某个点终止。但是,我启动的gui仍然可见。最简单的例子是启动PNG查看器:

import subprocess
proc = subprocess.Popen(['start', 'test.png'], shell=True)
proc.kill()

kill()命令之后,gui仍然在运行,我必须手动关闭它。你知道吗

据我所知,这可以在Linux上通过传递preexec_fn=os.setsidPopen(参见How to terminate a python subprocess launched with shell=True)来解决。因为命令os.setsid是特定于Linux的,所以我不知道如何在Windows上实现它。你知道吗

另一种方法是去掉shell=True,但是,我不知道如何实现这一点,因为我必须传递文件名。你知道吗

任何帮助都将不胜感激。。。你知道吗


Tags: 命令truepng进程oslinuxwindowsgui
2条回答

如果您想摆脱shell=True,您必须给出可执行文件的完整路径。你知道吗

import subprocess
proc = subprocess.Popen('/full/path/start %s' % filename)
proc.kill()

start是一个内部命令:它需要cmd.exe(您可以开始使用shell=True或直接运行)。Popen()不等待start命令完成,start不等待PNG查看器在调用proc.kill()时退出,start可能已经完成。你知道吗

您可以尝试直接运行PNG查看器(如果在标准位置可以找到相应的exe文件,则不需要提供完整路径)。你知道吗

How to terminate a python subprocess launched with shell=True也有一个针对Windows的解决方案(如果PNG viewer启动子进程,您可以试试)。你知道吗

相关问题 更多 >