有没有办法在python中异步获取getkey()/ getchar()?

时间:2018-02-15 09:25:32

标签: python async-await

我真的需要asyncio兼容getkey(),所以我可以

async def stuff():
    await getkey()

因此,当协程stuff命中await时,我们的循环会停止任务,并继续执行另一个任务。

我是编码新手,但确实在某处有这样的事情?

如果没有,是否可以建立这样的协同程序? getkey()可以以任何形式返回按下的键值。 但它应该cbreaknoecho开启(不要等待输入,不要打印按下的键)。

(澄清,不需要继续阅读。)

请帮助我^^我知道,这种做法似乎很不寻常。运行在它自己的线程中的Curses将是正确的方法。但是我只能使用curses进行显示..我也很擅长编码..而且我没有时间去研究这个线程化的事情:/我只需要我的100行就能非常快速地工作,也只需要一次:!

2 个答案:

答案 0 :(得分:1)

如果您不想实际等待按键,一种方法是使用线程来检测按键:

from threading import Thread
import curses

key_pressed = False

def detect_key_press():
    global key_pressed
    stdscr = curses.initscr()
    key = stdscr.getch()
    key_pressed = True

def main():
    thread = Thread(target = detect_key_press)
    thread.start()
    while not key_pressed:
        print('Hello world\r')
    curses.endwin()

main()

使用全局变量并不是很好,但这是一种快速的方法。

答案 1 :(得分:0)

以下是使用keyboard而非curses的解决方案:

import keyboard
import time
from threading import Thread

key_pressed = False

def detect_key_press():
    global key_pressed
    while not keyboard.is_pressed('q'):
        pass
    key_pressed = True

def main():
    thread = Thread(target = detect_key_press)
    thread.start()
    while not key_pressed:
        print("Waiting for keypress...")
        time.sleep(1)
    
main()

thread内部启动main,等待按键