Python2.7:检测原始输入上按下的删除键
我正在准备一个非常简单的脚本,我需要用户输入某些值。在某一点上,如果用户输入的是delete键(用户按delete键,然后按Enter键),我想提供重用现有值或删除现有值的机会,但我似乎无法找到满意的答案(这让我感到相当惊讶…),这只是一个帮助脚本,所以我尽量避免使用更高级的东西,比如 这是我感兴趣的部分: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
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谢谢!我没有意识到这一点。