我正在编写一个在Linux中与Nano接口的应用程序。Nano需要接收控制序列以保存/退出/并处理文件(^G ^R ^O ^Y ^K
等)
我偶然发现了^X = U+0018
的unicode。但是由于我希望我的应用程序是完整的,我希望能够有一个完整的unicode字符列表,用于ctrl/alt/shift +任何其他键的组合。
我试着用netcat连接shell,按下(例如)CTRL+B,看看另一边出现了什么。这对一些shell有效,但不是所有shell都有效,因为终端在发送转义之前会“解释”它。
我现在悬赏,我想要的是
- A)获取所有转义码的方法,或
- B)一份全面的清单,包括我上面提到的。
4条答案
按热度按时间aemubtdh1#
你没有在问题中包含这么多代码,所以我不知道你是如何完成任务的。用Python处理子进程的最好方法是使用
subprocess
模块。如果你能提供更多代码细节,比如你是如何处理和绑定子进程的,我们会更有帮助。话虽如此,Linux支持向任何进程发送信号。这是通过
kill
系统调用实现的。Python也将这个系统调用封装在os.kill
中。你只需要将目标的pid和信号号作为参数传递。如果你使用子进程,Popen.send_signal
应该是要使用的方法。要恢复它,您需要目标进程的进程ID--在您的例子中应该是终端或Nano--并且需要知道信号号。
在您的例子中,我不认为CTRL + X是一个注册信号,而是一个特殊字符(在应用程序或终端中Map到
CTRL+X
的某个值),您需要弄清楚这个值是什么,并通过您的进程发送它。希望这有帮助!
zlhcx6iw2#
虽然我真的不认为你应该做你正在做的事情(打开Nano作为一个子进程,然后发送控制序列给它)。在我看来,你似乎试图用一个
expect
脚本或至少是相同的风格来控制Nano。在python中(我不熟悉pty.spawn,但签名似乎已经缺乏你需要的功能:与孩子的双向交流),您应该查找popen:http://docs.python.org/2/library/subprocess.html#subprocess.Popen使用popen,你可以生成一个子进程,并且仍然可以通过自定义的stdin/out/err文件描述符从python“读写”它。
至于要发送的内容的确切值,请查看以下内容:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Fruascii.htm
这似乎是:“\x18”应该就可以了。
4ioopgfo3#
我想明白了:
正如Paulo Bu所说,当按下CTRL + X这样的键时,终端接收到的不是信号,而是组合键。CTRL + X有一个Unicode等价物。
获取角色的过程:按ctrl + shift + U +0018在一个编辑器,如显示字符的gedit。
q1qsirdb4#
下面是ASCII表中的Control-{}代码,也许这就是您所需要的。
要输入ctrl-X,您需要尽可能地向文件中输入unicode(18)。有时\x0018可能会起作用,这取决于解释器如何解释它