Можно ли дождаться остановки задачи в диспетчере задач Windows? - PullRequest
0 голосов
/ 07 января 2019

Итак, я хочу, чтобы python запустил другую программу и подождал, пока эта программа не будет видна в диспетчере задач, а затем продолжил выполнение сценария. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Вот пример простого способа проверить, работает ли что-то в Windows и использует встроенную команду tasklist:

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')
0 голосов
/ 08 января 2019

Это можно сделать с помощью 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)
0 голосов
/ 07 января 2019

Как предложил @eryksun, модуль подпроцесса также может обрабатывать ожидание:

import subprocess
process = subprocess.Popen(["notepad.exe"], shell=False)
process.wait()
print ("notepad.exe closed")

Вы можете использовать что-то вроде этого, отслеживая идентификатор процесса открытой программы:

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
>>> 
...