Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单键检测,可添加长输入_Python_Input_Keyboard_Curses - Fatal编程技术网

Python 单键检测,可添加长输入

Python 单键检测,可添加长输入,python,input,keyboard,curses,Python,Input,Keyboard,Curses,上个星期我一直在面对这个问题,我认为这是微不足道的,但在尝试了许多不同的方法之后,我不知道还有什么可以尝试 我有一个应用程序,我需要进行按键检测(用键盘移动机器人手臂),但当我按下enter键时,我需要添加一些输入,这些输入应该是我想要的长度,只是一些正常的输入(“插入此处”) 我知道python库可以进行键检测,我成功地让pynput工作,但当我启动和停止线程几次时,它会使我的raspberry pi崩溃,我尝试了键盘库,但整个根目录要求都令人失望,我还需要诅咒才能工作,这似乎是可靠的,并且(

上个星期我一直在面对这个问题,我认为这是微不足道的,但在尝试了许多不同的方法之后,我不知道还有什么可以尝试

我有一个应用程序,我需要进行按键检测(用键盘移动机器人手臂),但当我按下enter键时,我需要添加一些输入,这些输入应该是我想要的长度,只是一些正常的
输入(“插入此处”)

我知道python库可以进行键检测,我成功地让pynput工作,但当我启动和停止线程几次时,它会使我的raspberry pi崩溃,我尝试了键盘库,但整个根目录要求都令人失望,我还需要诅咒才能工作,这似乎是可靠的,并且(几乎)不会导致任何问题,因此,检测一个密钥不是问题

我当然知道如何命名我的文件,并通过输入()获得我需要的所有信息,因此如果我必须使用其中一个选项,那么工作将相当简单,当我尝试同时应用这两种方法时,挑战就来了,基本上是检测键来完成我需要的一切,并且使用python输入来获取用户的所有输入。一旦按下enter,所有用于检测键的库似乎都完全控制了,他们不想不经一番斗争就释放它。他们似乎希望用户总是需要单键检测,但在我的情况下,我需要不断地打开和关闭它,我无法找到任何有效(或不)的方法让它正常工作

我的问题是:

当需要使用诅咒(或任何替代方法)时,以非阻塞的方式(因为我的代码在侦听密钥时需要做一些其他事情),使用密钥检测+完整用户输入的最佳方法是什么?创建和销毁整个过程是唯一的替代方法吗

这是我为简单起见创建的当前测试代码(它可以工作,但在侦听密钥时会阻止所有内容):

循环的原因是用户可以保存任意多个位置,因此在添加一些输入后,可以添加更多的位置

我看到人们通过在几秒钟后关闭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()键。 为了在获取输入时不阻塞程序,您需要在程序顶部导入
线程

对于线程,是一个链接,因此您可以了解有关线程的更多信息



我希望它能回答您的问题

,因为我能看到getstr是Input()的诅咒版本,对吗?这似乎是可行的,如果其他人来到这里,还有一些更改使其作为字符串输入工作,有关此答案的更多详细信息:
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()