【问题标题】:escape sequence for all the keyboard keys in pythonpython中所有键盘键的转义序列
【发布时间】:2013-04-12 16:17:19
【问题描述】:

我在 python 中使用 telnetlib... 我使用 '\r' 作为输入键,'\t' 用于 TAB。 与这种情况相同,我想要 SHIFT、PAGE UP、PAGE DOWN、F1、F2...F12 的字符序列。 请帮助我解决这个问题,因为我必须在我的代码中使用所有这些键盘键。

import telnetlib

HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.write("ls\n")
tn.write("exit\n")
tn.write("\r") #this is for enter
tn.write("\t") # this is for tab

#what should be here to other keys..pls

print tn.read_all()

【问题讨论】:

  • '\r' 表示 ASCII 中的回车符(len("\r") 为 1)。这些其他键没有字符,因此您需要计算出服务器期望的字节序列。 Shift 是一个修饰键,即 Shift-a 生成一个“A”字节,但 shift 本身不做任何事情。
  • 我得到了键 f4 = '\x1b4', f3 = \x1b3, f5 = \x1b5, f6 = \x1b6 的值,但我无法得到这些值背后的逻辑。@Thomas K:服务器期望一个“shift + F1”键,如何知道使用这个“shift + F1”事件生成了什么字节序列?

标签: python


【解决方案1】:

不幸的是,并非所有按键都会导致一个或多个字节通过网络发送。这实际上与终端仿真有关,因为控制键“意味着”由终端设备(或仿真器)解释。

不同的终端类型定义不同的键,并将它们映射到流中不同的字节值。例如,有些终端有 F11 和 F12,有些则没有。有的定义了Ctrl+F键、Shift+F键、Alt+F键、Command+F键;其他人没有。不同的终端通过网络将这些键映射到完全不同的字节序列。当涉及到箭头键和光标模式键(如插入)时,问题也是一样的。

您可能会发现某些键被客户端捕获并且根本不传输,或者非键盘事件(例如用鼠标调整终端窗口大小)传输终端转义序列。

【讨论】:

  • 感谢您的详细说明,但我真的被困在这里,我不知道如何找到 shift+F1 的字节序列。我得到了这两个链接以获得更多的 KT,我得到了 F 之类的键!到 F12 但仍然无法转换 SHIFT + F1。或者说我没有得到它背后的逻辑..链接是。 asciitable.comcoding.derkeiler.com/pdf/Archive/C_CPP/comp.lang.c/2006-04/…
  • Shift+F1 可能被终端程序,甚至桌面环境捕获,根本不传输。如果添加跟踪以报告接收到的每个字节,然后尝试 Shift+F1,您将看到对应的字节序列(如果有)。你可能什么也看不到。确切的字节序列将取决于被模拟的终端类型。
  • 另外,如果您根据观察到的特定字节序列对解决方案进行编码,那么当使用不同终端类型的其他用户尝试使用您的应用程序时,您的代码将会崩溃。
【解决方案2】:

你可以随时使用这个telnet客户端:https://www.redhat.com/archives/redhat-list/2000-August/msg00070.html

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 2020-09-15
    • 2020-04-16
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2021-11-19
    • 2014-07-12
    相关资源
    最近更新 更多