Python ожидает завершения подпроцесса перед завершением - PullRequest
0 голосов
/ 03 мая 2018

Я разрабатываю скрипт на python, который открывает программу, используя модуль подпроцесса, а затем использует модуль pyautogui для отправки сочетаний клавиш в программу. Однако, когда программа открывается, и я посылаю ей ярлык CTRL + O, программа открывает файл и затем выполняет некоторую обработку этого файла.

Есть ли способ, используя модуль подпроцесса в python, дождаться, пока программа закончит обработку (но все еще работает), чтобы затем ввести сочетание клавиш CTRL + S (используя pyautogui), прежде чем окончательно завершить программу / процесс?

Вот пример кода, который я использую:

from pyautogui import press, typewrite, hotkey, moveTo
from subprocess import Popen, PIPE, STDOUT
import time
import os   

def saveNClose(program, out_filename):
    # open the save file dialog
    hotkey('ctrl', 's')

    #wait for save file dialog to appear 
    time.sleep(0.5)

    # enter the file path of the file to save
    typewrite(out_filename, interval=0.01)

    # save to file
    press('enter')

    #close kurzweil
    program.terminate()

def openProgram(in_fname, out_fname, wait_time):

    #open kurzweil
    program = Popen([r"C:\Program Files (x86)\Kurzweil Educational 
    Systems\Kurzweil 3000\Kurzweil 3000.exe"], stdout=PIPE, stdin=PIPE, 
    stderr=STDOUT, shell=False)

    #wait for login screen to appear
    time.sleep(2)

    #login with creditentials Here

    press('enter') #login

    #wait for kuzweil to load
    time.sleep(8)

    #open the open file dialog
    hotkey('ctrl', 'o')

    #wait for open file dialog to appear
    time.sleep(1)

    #enter the file path of the file to open
    typewrite(in_fname, interval=0.01)

    #open the file
    press('enter')

    #wait for the conversion options to appear
    time.sleep(0.5)

    # confirm conversion options
    press('enter')

    # Program Does Processing Here

    #**************************************************
    # Need help Here to wait until processing is done.
    #**************************************************

    #Then input CTRL + S and Terminate.
    saveNClose(program, out_fname)
...