是否可以等到 windows taskmanager 中的任务停止?
Is it possible to wait until a task in the windows taskmanager has stopped?
所以基本上,我想 python 到 运行 另一个程序,等到该程序在任务管理器中不可见,然后继续执行脚本。
有什么想法吗?
正如@eryksun 所建议的,subprocess 模块也可以处理等待:
import subprocess
process = subprocess.Popen(["notepad.exe"], shell=False)
process.wait()
print ("notepad.exe closed")
您可以使用类似这样的方法,跟踪打开程序的进程 ID:
import subprocess, win32com.client, time
wmi=win32com.client.GetObject('winmgmts:')
process = subprocess.Popen(["notepad.exe"], shell=False)
pid = process.pid
flag = True
while flag:
flag = False
for p in wmi.InstancesOf('win32_process'):
if pid == int(p.Properties_('ProcessId')):
flag = True
time.sleep(.1)
print ("notepad.exe closed")
记事本关闭时的输出:
notepad.exe closed
>>>
下面是一个简单的示例,它使用内置的 tasklist
命令来查看 Windows 上的内容是否 运行:
import os
import subprocess
target = 'notepad.exe'
results = subprocess.check_output(['tasklist'], universal_newlines=True)
if any(line.startswith(target) for line in results.splitlines()):
print(target, 'is running')
else:
print(target, 'is *not* running')
用pywinauto可以做到:
from pywinauto import Application
app = Application().connect(process=pid) # or connect(title_re="") or other options
app.wait_for_process_exit(timeout=50, retry_interval=0.1)
所以基本上,我想 python 到 运行 另一个程序,等到该程序在任务管理器中不可见,然后继续执行脚本。 有什么想法吗?
正如@eryksun 所建议的,subprocess 模块也可以处理等待:
import subprocess
process = subprocess.Popen(["notepad.exe"], shell=False)
process.wait()
print ("notepad.exe closed")
您可以使用类似这样的方法,跟踪打开程序的进程 ID:
import subprocess, win32com.client, time
wmi=win32com.client.GetObject('winmgmts:')
process = subprocess.Popen(["notepad.exe"], shell=False)
pid = process.pid
flag = True
while flag:
flag = False
for p in wmi.InstancesOf('win32_process'):
if pid == int(p.Properties_('ProcessId')):
flag = True
time.sleep(.1)
print ("notepad.exe closed")
记事本关闭时的输出:
notepad.exe closed
>>>
下面是一个简单的示例,它使用内置的 tasklist
命令来查看 Windows 上的内容是否 运行:
import os
import subprocess
target = 'notepad.exe'
results = subprocess.check_output(['tasklist'], universal_newlines=True)
if any(line.startswith(target) for line in results.splitlines()):
print(target, 'is running')
else:
print(target, 'is *not* running')
用pywinauto可以做到:
from pywinauto import Application
app = Application().connect(process=pid) # or connect(title_re="") or other options
app.wait_for_process_exit(timeout=50, retry_interval=0.1)