Python启动Windows cmd(.bat)命令行并kill进程

x33g5p2x  于2022-08-17 转载在 Python  
字(0.8k)|赞(0)|评价(0)|浏览(939)

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)

相关文章