python - pyautogui 和 schedule 不能一起工作
问题描述
我正在编写一个每 10 秒按一次键的程序。为此,我使用了 pyautogui 和 schedule 的组合。
from pyautogui import press, typewrite, hotkey
import schedule
keystroke = "w"
def keypress():
press(keystroke)
schedule.every(10).seconds.do(keypress)
但是当我运行它时,什么也没有发生。我等了 10 秒钟,但没有输入任何键。我究竟做错了什么?
解决方案
让我们逐节检查您的代码,看看我们是否可以确定问题所在。
- 你导入一些库
- 您定义了一个希望每 10 秒运行一次的函数
- 你告诉默认调度器你想每 10 秒调用一次你的函数
- 然后你的程序终止
有两个有点相关的问题:
- 您没有在代码中告诉调度程序运行任何已调度的作业
- 您的代码在运行任何预定作业之前立即终止
要解决这些问题,您需要您的程序循环并让调度程序检查并运行任何挂起的作业。
以下代码定义了一个简单的作业,并安排它每 10 秒运行一次。然后它会永远循环,每秒检查一次待处理的作业。
import schedule
import time
def job():
print("Running....")
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
如果您希望您的程序做的只是每 n 个单位时间循环并执行 1 个动作,那么调度模块就太过分了。它更适用于复杂系统,其中有大量计划的操作都在不同的周期上运行。
推荐阅读
- c# - ASP.NET Core - 可配置路由
- flutter - 如何修复“使用不包含 MediaQuery 的上下文调用 MediaQuery.of()”的错误?
- python - 如何按顺序连接列表的元素?
- c# - 当类从用户控件继承时,如何阻止对位置等属性的访问
- flutter - Flutter StreamBuilder 你孩子的范围是什么
- bash - 在 mac 终端上找不到导出命令
- r - Xaringan 模块演示
- python - 如何根据字典对列表中的单词进行分类?
- spring - 当我有两种类型的用户时,如何使用 spring security 保护 rest api
- java - 为什么除以 1000000000 时没有小数位