上个星期我一直面对这个问题,我认为这是微不足道的,但是在尝试了许多不同的方法之后,我不知道还能尝试什么。
我有一个需要进行按键检测(用键盘移动机器人手臂)的应用程序,但是当我按Enter键时,我需要添加一些输入,只要我想输入就可以,只是一些常规输入(“在此处插入”)
我知道要进行密钥检测的python库,我可以使pynput成功工作,但是当我多次启动和停止线程时,它使我的raspberry pi崩溃了,我尝试了Keyboard库,但整个root需求都令人失望,我也得到了很多建议,这似乎很可靠,并且(几乎)没有引起任何问题,因此检测到1个键不是问题。
我当然知道如何通过执行input()来命名文件并获取所需的所有信息,因此,如果我不得不使用这些选项之一,那么工作将非常简单,那么当我尝试申请时就会遇到挑战两种方法都结合在一起,基本上检测到按键可以完成我需要做的所有事情,并在按下Enter键后立即使用python Input从用户获取所有输入,所有用于检测按键的库似乎都拥有完全控制权,而他们不想要无需战斗即可释放它。他们似乎希望用户始终需要单键检测,但是在我的情况下,我需要不断地打开和关闭它,我无法找出任何有效(或不可行)的方法来使其正常工作。
我的问题是:
什么时候最好以非阻塞方式(例如我的代码在侦听键时需要做其他事情)用诅咒(或其他替代方法)进行键检测和用户的全输入?整个事情是唯一的选择吗?
这是我为简单起见而创建的当前测试代码(可以工作,但在侦听键时会阻止所有内容:]]
import curses import time import os stdscr = None addInput = False def SetupCurses(): global stdscr stdscr = curses.initscr() curses.cbreak() stdscr.keypad(1) def StartCurse(): global addInput key = '' while key != ord('q'): key = stdscr.getch() stdscr.addstr(str(key)) if key == ord('a'): print("\nyou pressed a\n") if key == 10: print("\nyou pressed enter!\n") addInput = True break def EndCurse(): curses.endwin() while(True): SetupCurses() StartCurse() EndCurse() if addInput: theinput = input("add your input\n") print(theinput) time.sleep(4) addInput = False #if there isn't any input to add I want the code to continue because there is non-related keys stuff to do, but of course it stopped at "StartCurse" #if there is something to add the code can stop at addInput
循环的原因是因为用户可以保存任意数量的职位,所以在添加一些输入之后,就有可能添加更多职位。
[我看到人们在几秒钟后关闭curses循环(无论如何都会停止一切……)使这种情况变得不那么混乱,有点靠运气了……类似:
def ExecuteCurses():
global AddInput
#open it and close it very quickly to grab a key if it is pressed
c = stdscr.getch()
if c == ord('a'):
print("you pressed a")
AddInput = True
time.sleep(1)
curses.endwin()
我上个星期一直面对这个问题,我认为这是微不足道的,但是在尝试了许多不同的方法之后,我不知道还能尝试什么。我有一个需要在其中使用的应用程序...
如果您想要完整而长时间的用户输入,则需要使用curses.echo()
,然后使用stdscr.getstr()
。那将等待用户按下enter()。为了不使程序在获取输入时阻塞程序,您需要threading
,您必须在程序顶部将其导入