获取使用' subprocess.Popen'打开的CMD shell的进程ID。

时间:2018-02-05 15:23:55

标签: python windows python-3.x cmd subprocess

我正在使用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例外。

从我在类似问题上找到的一些答案中,我认为可以通过窗口的标题来完成,但我真的想避免这种笨拙的解决方法。

有什么想法吗?

谢谢。

0 个答案:

没有答案