在 Python 中终止启动的 Popen 子进程
Terminating started Popen subprocess in Python
我在 Windows,我正在使用 subprocess.Popen
开始一个新进程,我想在某个时间点终止。但是,我启动的 gui 仍然可见。一个最小的例子是启动 PNG 查看器:
import subprocess
proc = subprocess.Popen(['start', 'test.png'], shell=True)
proc.kill()
在 kill()
命令之后,gui 仍然是 运行,我必须手动关闭它。
据我所知,这可以在 Linux 上通过将 preexec_fn=os.setsid
传递给 Popen
来解决(参见 How to terminate a python subprocess launched with shell=True)。由于命令 os.setsid
特定于 Linux 我不知道如何在 Windows 上实现它。
另一种方法是摆脱 shell=True
,但是,我不知道如何实现这一点,因为我必须传递文件名。
任何帮助将不胜感激...
如果你想删除 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 查看器启动子进程,您可以尝试)。
我在 Windows,我正在使用 subprocess.Popen
开始一个新进程,我想在某个时间点终止。但是,我启动的 gui 仍然可见。一个最小的例子是启动 PNG 查看器:
import subprocess
proc = subprocess.Popen(['start', 'test.png'], shell=True)
proc.kill()
在 kill()
命令之后,gui 仍然是 运行,我必须手动关闭它。
据我所知,这可以在 Linux 上通过将 preexec_fn=os.setsid
传递给 Popen
来解决(参见 How to terminate a python subprocess launched with shell=True)。由于命令 os.setsid
特定于 Linux 我不知道如何在 Windows 上实现它。
另一种方法是摆脱 shell=True
,但是,我不知道如何实现这一点,因为我必须传递文件名。
任何帮助将不胜感激...
如果你想删除 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 查看器启动子进程,您可以尝试)。