gpt4 book ai didi

linux - python 2.7 : How do I read single keypress in Linux (Including special characters)?

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:28 27 4
gpt4 key购买 nike

我看到很多关于如何在 python 中读取单个按键的问题。对于 Windows,答案是使用有效的 msvcrt 模块。但是对于 Linux,他们使用这样的东西:

import termios, fcntl, sys, os
def kbhit():
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while True:
try:
c = sys.stdin.read(1)
return True
except IOError:
return False
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)

或者这个:

def __init__(self):
import tty, sys

def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
getch = _Getch()

这两个的问题在于它们无法读取特殊字符,例如 cntrl-C (^C) 或箭头键。有没有一种 Linux 方法可以读取单个按键包括像方向键这样的特殊字符?

最佳答案

检查这段代码:

def AllKeys(NormalInput=1):
""" Detect Key Input """

import termios, sys, tty

fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)

tty.setraw(fd)
tty.setcbreak(fd) # Control + C

try:
#while True:
ch = sys.stdin.read(NormalInput)

if ch == '\x1b':
ch = ch.lstrip(' ')
ch += sys.stdin.read(2)

finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch

在我的例子中,它按预期工作!它检测 ctrl + 'char'

只需检查 UDP 客户端的这个简单示例:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:

try:

InKey = AllKeys()

print InKey

if InKey == "\x03":
raise KeyboardInterrupt

elif InKey == '~':
break

else:
sock.sendto(InKey, (UDP_IP, UDP_PORT))

except KeyboardInterrupt:
break

sock.shutdown()
sock.close()

您可以使用服务器轻松扩展它,该服务器处理通过 Uinput(虚拟 HID 设备)接收的虚拟键盘输入字符。然后使用 Iptables 规则通过端口控制保护它。添加 ssh 隧道以确保安全。否则,您会在 ARP 缓存投毒 (MITM) 测试中看到普通数据流量。

关于linux - python 2.7 : How do I read single keypress in Linux (Including special characters)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41582914/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com