【问题标题】:Have python code execute indefinitely until a key is pressed让python代码无限期执行,直到按下一个键
【发布时间】:2022-10-06 04:14:02
【问题描述】:

我试图让脚本不确定地运行,直到我按下一个键(在本例中为 \'q\')。在尝试了多种切换条件组合并移动代码之后,我无法弄清楚如何做到这一点。有人可以帮我制作函数(\'right\' 和 \'left\')循环,直到我按下键 \'q\'?另外,即使我按了\'q\',我也希望脚本继续运行。这样即使我关闭了它们,我仍然可以使用左右功能。谢谢

import time
import keyboard
from pynput.keyboard import Controller, Key
import pyautogui

pykeyboard = Controller()


def right():  # This is the action I want to do
    while keyboard.read_key(.1) != \"q\":
        time.sleep(.2)
        pykeyboard.press(\'d\')
        pyautogui.keyDown(\"space\")
        time.sleep(5)
        pyautogui.keyUp(\"space\")
        pykeyboard.release(\'d\')


def left():
    while keyboard.read_key(.1) != \"q\":  # This should continue executing until \'q\' is pressed
        time.sleep(.2)
        pykeyboard.press(\'a\')
        pyautogui.keyDown(\"space\")
        time.sleep(3)
        pyautogui.keyUp(\"space\")
        pykeyboard.release(\'a\')


while True:

    if keyboard.read_key() == \"t\":  # This listens for when \'t\' is pressed
        right()
    if keyboard.read_key() == \"r\":
        left()
    if keyboard.read_key() == \"+\":
        break
  • keyboard 未定义。那应该是pykeyboard 吗?
  • 你为什么在这里使用三个模块来做同样的事情? keyboard 不能做你想做的一切吗?它有on_press_keyon_release_key 事件。
  • 到目前为止,我正在使用不同的模块,因为我想扩展我的代码,而键盘没有我将来需要的功能。
  • 一个while-loop 可能会阻塞其他循环和函数,您可能必须在单独的线程中运行它们。
  • 你的循环使用sleep,所以当你真正按下q时它们可能会错过 - 我会使用分离的线程来检查q并设置全局变量running = False并使用while running:而不是while keyboard.read_key(.1) != \"q\":的循环

标签: python while-loop


【解决方案1】:

我使用多线程(如 furas 建议的那样)制作另一个脚本,如果按下字母“q”,它将继续杀死原始函数。

【讨论】:

    猜你喜欢
    • 2020-05-17
    • 2013-03-22
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2018-11-11
    • 2021-01-15
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多