我使用PuTTY连接到Linux机器。
在Linux机器上,我正在运行一个python脚本,它接受一个字符列表并按顺序打印每个字符及其索引。
我列表中的某些字符超出了可打印的ascii字符范围。这些不规则的字符正在破坏我的输出。有时他们根本就没有出现,而有时他们实际上删除了大块有效文本。
我以为我可以通过关闭缓冲来纠正这个问题,但是当我使用python -u标志运行脚本时问题仍然存在。
有趣的是,当我将输入传输给较少读者时,不会发生此问题。此外,不规则字符显示如下:<A9>
,<A7>
,^V
,^@
等。不会丢失任何文本块。
我不确定我的问题在哪里。有没有办法配置我的终端,以便unpiped输出仍然会显示不规则的字符?
答案 0 :(得分:1)
您已将less
配置为将原始字符显示为表示这些不可打印字符的ASCII字符组合; -r
或--raw-control-chars
命令行开关执行此操作:
导致显示“原始”控制字符。默认设置是使用插入符号表示控制字符;例如,控件-A(八进制001)显示为“^ A”。警告:当使用-r选项时,less会无法跟踪屏幕的实际外观(因为这取决于屏幕如何响应每种类型的控制字符)。因此,可能会出现各种显示问题,例如长线在错误的位置被分开。
这是一个特殊的less
功能。
如果你想对你的Python程序做同样的事情,你需要自己做同样的翻译。创建一个映射,将“特殊”字符转换为转义码:
nonprintable = {
'\x00': '^@',
'\x01': '^A',
'\x02': '^B',
'\x03': '^C',
'\x04': '^D',
# etc.
}
for i in range(128):
character = chr(i)
print i, nonprintable.get(character, character)
答案 1 :(得分:0)
是远程机器可能设置为unicode(现代Linux发行版是),然后确保你运行带有unicode设置的putty。