Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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
Python2.7:检测原始输入上按下的删除键_Python_Input_Console Application_Special Characters - Fatal编程技术网

Python2.7:检测原始输入上按下的删除键

Python2.7:检测原始输入上按下的删除键,python,input,console-application,special-characters,Python,Input,Console Application,Special Characters,我正在准备一个非常简单的脚本,我需要用户输入某些值。在某一点上,如果用户输入的是delete键(用户按delete键,然后按Enter键),我想提供重用现有值或删除现有值的机会,但我似乎无法找到满意的答案(这让我感到相当惊讶…),这只是一个帮助脚本,所以我尽量避免使用更高级的东西,比如 这是我感兴趣的部分: if reusable_params: for key in list(k for k in config_dict.keys() if k not in ["mac", "base

我正在准备一个非常简单的脚本,我需要用户输入某些值。在某一点上,如果用户输入的是delete键(用户按delete键,然后按Enter键),我想提供重用现有值或删除现有值的机会,但我似乎无法找到满意的答案(这让我感到相当惊讶…),这只是一个帮助脚本,所以我尽量避免使用更高级的东西,比如

这是我感兴趣的部分:

if reusable_params:
    for key in list(k for k in config_dict.keys() if k not in ["mac", "base_url", "command_name"]):
        msg = "Enter new value for parameter {0}. Press ENTER to reuse the previous {1}. Press DELETE+ENTER to remove this key.".format(key, config_dict[key])
        input = unicode(raw_input(msg).strip().decode(sys.stdin.encoding))
        logging.debug("input: %s, len(input) %s" % (input, len(input))
按DELETE+Enter键返回一个看起来像unicode的4个字符的字符串:


提前谢谢你

您的cmd窗口是一个软件,即计算机程序。当您在cmd窗口中点击delete键时,cmd窗口将被编程,这样它就不会将delete键(127)的ascii码添加到存储迄今为止输入的所有按键笔划的数组中,即输入缓冲区。相反,当您点击delete键时,cmd窗口被编程为从数组中删除最后一个按键笔划。简单到:

key_strokes = []

#get key_code

if key_code == 127:
    key_strokes.pop()
else:
    key_strokes.append(key_code)
问题是,您需要控制生成cmd窗口的程序,以更改其行为方式

最简单的解决方案是让用户输入一个“d”进行删除,而不是按delete键

否则,您需要在用户键入时捕获关键笔划。对击键做出反应(而不是等待回车键)的最佳和最有效的方法是了解Tkinter。您可以向用户展示您创建的一个窗口,即所谓的GUI,您可以对其进行编程,以在用户点击delete键时执行任何您想要的操作:

import Tkinter as tk

root = tk.Tk()
root.geometry("300x200")

entry = tk.Entry(root)
entry.pack()

def get_key(event):
    print "You pressed", repr(event.char)
entry.bind("<Key>", get_key)

root.mainloop()
为什么要创建一个生成器,然后从生成器中提取列表后立即将其丢弃?取消发电机步骤有什么问题:

[
    k for k in config_dict.keys() 
    if k not in ["mac", "base_url", "command_name"]
]
如果你用一个“not”的集合而不是一个列表,那么效率会更高。必须搜索整个列表不如查找一个字典有效:

[
    k for k in config_dict.keys() 
    if k not in set(["mac", "base_url", "command_name"])
]

cmd窗口是一个软件,即计算机程序。当您在cmd窗口中点击delete键时,cmd窗口将被编程,这样它就不会将delete键(127)的ascii码添加到存储迄今为止输入的所有按键笔划的数组中,即输入缓冲区。相反,当您点击delete键时,cmd窗口被编程为从数组中删除最后一个按键笔划。简单到:

key_strokes = []

#get key_code

if key_code == 127:
    key_strokes.pop()
else:
    key_strokes.append(key_code)
问题是,您需要控制生成cmd窗口的程序,以更改其行为方式

最简单的解决方案是让用户输入一个“d”进行删除,而不是按delete键

否则,您需要在用户键入时捕获关键笔划。对击键做出反应(而不是等待回车键)的最佳和最有效的方法是了解Tkinter。您可以向用户展示您创建的一个窗口,即所谓的GUI,您可以对其进行编程,以在用户点击delete键时执行任何您想要的操作:

import Tkinter as tk

root = tk.Tk()
root.geometry("300x200")

entry = tk.Entry(root)
entry.pack()

def get_key(event):
    print "You pressed", repr(event.char)
entry.bind("<Key>", get_key)

root.mainloop()
为什么要创建一个生成器,然后从生成器中提取列表后立即将其丢弃?取消发电机步骤有什么问题:

[
    k for k in config_dict.keys() 
    if k not in ["mac", "base_url", "command_name"]
]
如果你用一个“not”的集合而不是一个列表,那么效率会更高。必须搜索整个列表不如查找一个字典有效:

[
    k for k in config_dict.keys() 
    if k not in set(["mac", "base_url", "command_name"])
]

您可能想看看,它允许您捕获键盘事件,另一个选项是使用
pygame
,它具有强大的按键事件支持

对于
pygame

具体来说,您可能想看看这个(
pygame.keys

所以你可以做类似的事情

key = pygame.key.get_pressed()
        if key[pygame.K_DELETE]:
           #your code here...
对于
pykeylogger
,来自:


您可能想看看,它允许您捕获键盘事件,另一个选项是使用
pygame
,它具有强大的按键事件支持

对于
pygame

具体来说,您可能想看看这个(
pygame.keys

所以你可以做类似的事情

key = pygame.key.get_pressed()
        if key[pygame.K_DELETE]:
           #your code here...
对于
pykeylogger
,来自:


raw_input
无法捕获单个击键(除了Enter键之外)。如果你真的想让你的脚本保持简单,你最好的办法就是放弃这个功能,而选择一个更容易处理的功能(即,在不输入任何输入的情况下按Enter键以显示以前输入的命令列表,再次按Enter键以执行最后一个命令)
raw\u input
无法捕获单个击键(除了Enter键之外)。如果你真的想让你的脚本保持简单,最好的办法是放弃这个功能,而选择一个稍微容易处理的功能(即不输入任何输入就按Enter键,以显示以前输入的命令列表,再按Enter键执行最后一个命令)退格(ascii代码8)不等同于删除(ascii代码127)。如果你再往下看,它会显示:
K_delete
@7stud谢谢!我没有意识到。退格(ascii代码8)不等同于删除(ascii代码127)。如果你再往下看,它会显示:
K_delete
@7stude谢谢!我没有意识到这一点。