Python启动Windows cmd(.bat)命令行并kill进程
有时候需要通过Python启动一个Windows下的.bat文件,并在启动时候加入一些命令选项,比如典型的网络ping命令等。假设现在已经在Windows下写好了一个.bat文件,需要由Python启动,由Python接管这个.bat启动的进程,并在某些时机下关闭这个进程。
import subprocess, psutil
import time
if __name__ == '__main__':
bat_path = r'.bat文件路径 可以跟一些启动参数选项'
# 正常创建一个cmd命令的进程,并在python的标准输出管道窗口打印
process = subprocess.Popen(bat_path, shell=False, stdout=subprocess.PIPE)
# 将阻塞process的运转,意味着process不会再输出
time.sleep(3)
# 递归kill进程
pobj = psutil.Process(process.pid)
for c in pobj.children(recursive=True):
c.kill()
pobj.kill()
上面代码在启动一个.bat文件后,等待3秒再将这个.bat文件启动的进程kill掉。.bat输出的内容在Python的标准输出里面。
如果把process的创建改成:
process = subprocess.Popen(bat_path, creationflags=subprocess.CREATE_NEW_CONSOLE)
将会打开一个标准的Windows 控制台窗口(黑窗口)执行.bat。但仍可以在python代码里面通过pid句柄kill掉这个新开的Windows控制台窗口。
判断进程是否在运行:
psutil.Process(process.pid).is_running()
判断进程是否还存在:
psutil.pid_exists(进程的pid)