我正在使用subprocess.Popen
来运行CMD shell中的一些可执行文件:
p = subprocess.Popen('cmd /c start app.exe')
我在通过p.terminate()
杀死CMD时关闭控制台窗口时遇到问题。如果我马上做,那么控制台窗口甚至都不会打开。如果我在一段时间后这样做,那么控制台窗口就不会关闭。
CMD运行的app.exe
是服务器,正在侦听其他进程。当其他进程完成后,我需要关闭服务器以及它所连接的控制台窗口。
我认为p
实际上是start app.exe
批处理脚本的句柄,而不是实际的CMD shell。
这是我的完整脚本:
import subprocess
p1 = subprocess.Popen('cmd /c start app.exe')
p2 = subprocess.Popen('cmd /c call test.exe')
p2.wait()
p1.terminate()
我也试过这个(基于this answer):
import subprocess, psutil
p1 = subprocess.Popen('cmd /c start app.exe')
p2 = subprocess.Popen('cmd /c call test.exe')
p2.wait()
pobj = psutil.Process(p1.pid)
pobj.terminate()
但得到NoSuchProcess
例外。
从我在类似问题上找到的一些答案中,我认为可以通过窗口的标题来完成,但我真的想避免这种笨拙的解决方法。
有什么想法吗?
谢谢。