Python子流程:打开一个程序,等待用户保存并关闭它



我有一段代码,可以在GUI上启动excel文件。然后由用户更新并关闭。该用户输入稍后将由程序使用。所以我希望我的程序等到用户关闭GUI中的excel文件。我试着跟随,但我想它只等程序打开。

import subprocess
loc = "C:\Users\Public\Documents\Sheet_groups.xlsx"
p = subprocess.Popen(['start',loc],stdout=subprocess.PIPE,shell = True)
p.communicate()

PS:我是编码世界的新手

您可以使用psutil(进程和系统实用程序(来检查Excel进程是否仍处于打开状态。试试这个:

import psutil
import subprocess
import time
isopen=True
loc = "C:\Users\Public\Documents\Sheet_groups.xlsx"
p = subprocess.Popen(['start',loc],stdout=subprocess.PIPE,shell = True)
time.sleep(2)
while(isopen):
isopen="EXCEL.EXE" in (p.name() for p in psutil.process_iter()) 
time.sleep(2)
print("File closed")

若要检查特定的窗口是否打开,您可以使用pywinauto库安装它。

pip install pywinauto

然后尝试:

import subprocess
import time
from pywinauto import Desktop
isopen=True
loc = "C:\Users\Public\Documents\Sheet_groups.xlsx"
p = subprocess.Popen(['start',loc],shell = True)
time.sleep(2)
windows = Desktop(backend="uia").windows()
while(isopen):
isopen="Sheet_groups.xlsx - Excel" in [w.window_text() for w in windows]
time.sleep(2)

print("File closed")

如果你不能使用pywinauto:,你可以试试这个

import subprocess
import time
import win32gui
isopen=True
loc = "C:\Users\Public\Documents\Sheet_groups.xlsx"
running=""
def winEnumHandler( hwnd, ctx ):
global running
if win32gui.IsWindowVisible( hwnd ):
running+=win32gui.GetWindowText( hwnd )


p = subprocess.Popen(['start',loc],shell = True)
time.sleep(2)
while(isopen):
isopen=win32gui.EnumWindows( winEnumHandler, None )
isopen="Sheet_groups.xlsx" in running
running=""
time.sleep(2)

print("File closed")

最新更新