如何使print("hello.")与while True窗口关闭代码同时运行?
问题原因
你的代码里while True是死循环,程序会一直卡在这个循环里,永远无法执行后面的print("hello.");就算把循环放到另一个文件导入,导入模块时会自动执行模块内的代码,所以导入后直接进入死循环,主程序的print还是无法运行。
解决方法:用多线程/多进程分离任务
要让循环和print同时运行,需要把它们放到不同的执行流中,推荐用多线程(开销更小),也可以用多进程。
方法一:多线程实现(推荐)
把窗口关闭的循环封装成函数,用threading模块启动一个后台线程运行这个函数,主线程就可以正常执行print:
import pyautogui import threading def close_target_windows(): while True: # 关闭记事本窗口 for win in pyautogui.getWindowsWithTitle('notepad'): print(win) win.close() # 关闭谷歌相关窗口 for win in pyautogui.getWindowsWithTitle('google'): print(win) win.close() # 启动后台线程,daemon=True表示主线程结束时自动终止线程 window_thread = threading.Thread(target=close_target_windows, daemon=True) window_thread.start() # 主线程执行print print("hello.") # 如果需要程序保持运行,可添加输入等待(否则主线程结束后程序会退出) # input("按回车键退出程序...")
方法二:拆分到独立文件并通过线程调用
如果想把窗口关闭逻辑放到单独文件,比如命名为window_closer.py,文件内容如下:
import pyautogui def close_target_windows(): while True: for win in pyautogui.getWindowsWithTitle('notepad'): print(win) win.close() for win in pyautogui.getWindowsWithTitle('google'): print(win) win.close()
然后在主文件中导入函数并启动线程:
import threading from window_closer import close_target_windows window_thread = threading.Thread(target=close_target_windows, daemon=True) window_thread.start() print("hello.") # 可选:保持主线程运行 # input("按回车键退出...")
方法三:多进程实现(适合资源隔离场景)
如果需要更彻底的资源隔离,可以用multiprocessing模块:
import pyautogui import multiprocessing def close_target_windows(): while True: for win in pyautogui.getWindowsWithTitle('notepad'): print(win) win.close() for win in pyautogui.getWindowsWithTitle('google'): print(win) win.close() # 启动进程 window_process = multiprocessing.Process(target=close_target_windows) window_process.start() print("hello.") # 可选:等待用户输入后结束进程并退出 # input("按回车键退出...") # window_process.terminate()
内容的提问来源于stack exchange,提问作者레이첼유아
相关产品推荐
相关产品推荐

