我正在使用的python模块提供了一个钩子,允许在将用户键盘输入发送到shell终端之前捕获它。我面临的问题是它逐个字符地捕获输入,这使得当用户执行退格或移动光标等操作时捕获输入命令很困难。
例如,给定字符串退出\ x1b [4D \ x1b [Jshow自己出去],会发生以下情况:
>>> a = exit\x1b[4D\x1b[Jshow myself out
>>> print(a)
show myself out
>>> with open('file.txt', 'w+') as f:
>>> f.write(a)
>>> exit()
less abc.txt
less命令显示原始命令(exit \ x1b [4D \ x1b [Jshow自己出去],实际上我希望它在使用打印功能时显示'干净'存储(显示自己出来) )。
打印结果,或者“抓住”文件显示我想要显示的内容,但我猜这里终端正在改变输出。
有没有办法实现'干净'写入文件,使用一些python模块,或一些bash实用程序?当然必须有一些模块可以为我做这个吗?
答案 0 :(得分:2)
less
正在解释控制字符。
您可以使用-r
命令行选项解决此问题:
$ less -r file.txt
show myself out
从手册:
-r or --raw-control-chars
Causes "raw" control characters to be displayed. The default is
to display control characters using the caret notation; for
example, a control-A (octal 001) is displayed as "^A". Warning:
when the -r option is used, less cannot keep track of the actual
appearance of the screen (since this depends on how the screen
responds to each type of control character). Thus, various dis‐
play problems may result, such as long lines being split in the
wrong place.
原始控制字符被发送到终端,然后终端将其解释为cat
。
正如其他人所说,在将它们写入文件之前,您需要自己解释这些字符。