Linux 如何获取CTRL+;B、 CTRL+;五十、 ALT+;K、 等等。。。?
我正在编写一个在linux中与Nano接口的应用程序。Nano需要接收控制序列以保存/退出/并使用文件(Linux 如何获取CTRL+;B、 CTRL+;五十、 ALT+;K、 等等。。。?,linux,unix,terminal,Linux,Unix,Terminal,我正在编写一个在linux中与Nano接口的应用程序。Nano需要接收控制序列以保存/退出/并使用文件(^G^R^O^Y^K等…) 我偶然发现了^X=U+0018的unicode。但我希望我的应用程序是完整的,我希望能够有一个完整的unicode字符列表,用于ctrl/alt/shift+任何其他键的组合 我试图通过在shell之间连接netcat,按下(例如)CTRL+B并查看另一侧显示的内容来实现这一点。这对他们中的一些人有效,而不是所有人,因为终端在发送转义之前“解释”了转义 我现在提供悬
^G^R^O^Y^K
等…)
我偶然发现了^X=U+0018
的unicode。但我希望我的应用程序是完整的,我希望能够有一个完整的unicode字符列表,用于ctrl/alt/shift+任何其他键的组合
我试图通过在shell之间连接netcat,按下(例如)CTRL+B并查看另一侧显示的内容来实现这一点。这对他们中的一些人有效,而不是所有人,因为终端在发送转义之前“解释”了转义
我现在提供悬赏,我想要的是
- A) 获取所有转义码的方法,或
- B) 一份全面的清单,包括我上面提到的那些
- 问题中没有包含太多代码,因此我不知道您是如何完成任务的。使用Python处理子流程的最佳方法是使用
子流程
模块。如果您能提供更多的代码细节,比如如何处理子流程和绑定它们,我们会更有帮助
话虽如此,Linux支持向任何进程发送信号。这是通过kill
系统调用完成的。Python还将此系统调用封装在os.kill
中。您只需将目标的pid和信号号作为参数传递。如果您使用的是子流程,Popen.send\u signal
应该是要使用的方法
要恢复它,您需要目标进程的进程ID——在您的例子中应该是终端或Nano——并且需要知道信号号
在您的情况下,我不认为CTRL+X是注册信号。相反,它是一个特殊字符(一些值映射到应用程序或终端中的CTRL+X
)。您需要弄清楚这个值是什么,并通过您的流程发送它
希望这有帮助 尽管我真的认为您不应该做您正在做的事情(将Nano作为子流程打开,然后向其发送控制序列)。在我看来,你似乎试图用
expect
脚本或至少是相同的风格来控制Nano。在python中(我不熟悉pty.spawn,但签名似乎已经缺少所需的功能:与孩子的双向通信),您应该查找popen:
使用popen,您可以通过设置自定义stdin/out/err文件描述符来生成一个子项,并且仍然可以从python对其进行“读写”
关于发送内容的确切值,请查看以下内容:
看起来好像:“\x18”应该可以很好地完成这个任务。找到了答案:
正如Paulo Bu所说,当按下CTRL+X等键时,终端接收到的不是信号,而是组合键。CTRL+X有一个unicode等效项
Hexadecimal code: 18, U+0018.
获取字符的过程:在显示字符的编辑器(如gedit)中按ctrl+shift+U+0018 如果CTRL+X不是注册信号,nano怎么知道您没有将键写入文件而不是要求保存?。在按住CTRL的同时,读取字母组合
CTRL
,然后读取X
。通常情况下,您不会键入任何以CTRL
开头的字母组合,不是吗?这不是信号,只是一个特殊字符。@smassey应该是这样的!谢谢:)明白了,它的十六进制代码是18,U+0018。gedit中的ctrl+shift+U+0018,这将为您提供unicode字符,将其复制/粘贴到终端中,然后瞧。无论如何,谢谢你的帮助。可能是的副本