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)