我正在使用 python 构建一个自动化系统,需要选项卡切换、鼠标单击等,这完全占用了我的系统。在此期间,我无法访问终端或任务栏来手动关闭/停止程序运行。
当自动化正在运行并且出现问题时,很难切换到终端并按 CTRL + C 来停止执行,因为它随着自动化而崩溃,使其变得更加混乱。
我尝试使用 pynput 的键盘库,因为我将其用于自动化,但我找不到同时运行两个脚本的方法。
请帮助我如何停止我的应用程序,而不干扰其通过键盘输入(如 esc 键、多线程或任何其他我可以使用它的方式)的流程,谢谢。
import json
import automated as auto
# Read the data from the JSON file
with open('mouse.json', 'r') as f:
data = json.load(f)
# Convert lists back to tuples
account_location = [tuple(lst) for lst in data["account_location"]]
tab_location = [tuple(lst) for lst in data["tab_location"]]
auto.open_ms()
auto.full_screen()
auto.scroll_down()
auto.open_all_accounts(account_location)
for i in range(2): # 2 times for 8 accounts ( 4 accounts per time )
auto.position_tabs()
count = 0
auto.search_tabs(count, tab_location)
auto.exit_tabs()
auto.shutdown()
注意:我不考虑粘贴automatic.py 文件,因为它只是一堆循环和键盘输入。只是为了确保此代码不在循环中。
一种无需与终端交互即可随时停止 python 程序执行的方式/方法。
您可以通过使用多线程和键盘侦听器的组合来解决此问题,这将允许您随时停止脚本而不干扰自动化流程。您可以使用
pynput
库在单独的线程中进行键盘监控,并在按下特定键(如 ESC
)时停止主要自动化。
这是代码。
pynput
pip install pynput
import json
import automated as auto
from pynput import keyboard
import threading
import sys
# Flag to control stopping the automation
stop_flag = False
def on_press(key):
global stop_flag
try:
# If ESC is pressed, set the flag to True to stop the automation
if key == keyboard.Key.esc:
print("ESC pressed. Stopping automation...")
stop_flag = True
return False # Stop the listener
except Exception as e:
print(f"Error in listener: {e}")
def run_automation():
global stop_flag
# Read the data from the JSON file
with open('mouse.json', 'r') as f:
data = json.load(f)
# Convert lists back to tuples
account_location = [tuple(lst) for lst in data["account_location"]]
tab_location = [tuple(lst) for lst in data["tab_location"]]
auto.open_ms()
auto.full_screen()
auto.scroll_down()
auto.open_all_accounts(account_location)
for i in range(2): # 2 times for 8 accounts ( 4 accounts per time )
if stop_flag: # Check if stop is requested
print("Automation stopped.")
return
auto.position_tabs()
count = 0
auto.search_tabs(count, tab_location)
auto.exit_tabs()
auto.shutdown()
# Run the automation in a separate thread
automation_thread = threading.Thread(target=run_automation)
automation_thread.start()
# Start keyboard listener in the main thread
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
# Join automation thread after listener is done
automation_thread.join()
希望这对你有一点帮助。