我偶然发现了我只能将其描述为Python交互式解释器中的错误.虽然这个bug相当无关紧要,但我觉得这是一个有趣的问题,并且很有可能学习python,低级计算和调试.
问题出现在这里:
pic = open("blurry.jpg", "rb")
data = pic.read()
for byte in data:
print byte
Run Code Online (Sandbox Code Playgroud)
这导致......
#prints the entire file byte by byte_
?
0
?
?
>>> 1;2c
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我发现[] {}\@ ^已分别替换为Ä,Å,ä,å,ö,É,'Ü'.有趣的是,他们仍然保持功能.例如,list = Ä1,2,3,4Å不会引发任何错误.此外,可能更有趣......即使在我退出解释器并重新进入bash之后,这种行为仍在继续.
此外,我只能在使用特定图像时重新创建此行为,我在此处托管:http://imgur.com/lTo6m
我还没有弄清楚我会在哪里开始分析这样的问题,所以我希望有人可以提供一些见解.
一如既往地谢谢!
在bash中输入“ vi [FILENAME]”后,得到以下结果:
.... \r\"gu1.txt\" 16L, 87C ESC[>cESC[1;1H 111\r\n1112.....
该行中标记的第一个文本是文件名称,紧随vi结果的行数和列数。
第二课包含两个我不理解它们含义的转义序列:ESC[>c和ESC[1;1H。
最后的文本包括作为vi结果显示的文本,即文件的内容。
您能否解释一下ANSI转义码序列是什么ESC[>c,以及它与紧随其后的转义码序列之间的关系ESC[1;1H?
提前致谢
我有一个 Java 应用程序,它使用ANSI 转义序列来显示颜色、定位光标等。
它在常规 Unices 下xterm以及在和mintty(在Cygwin 中)下都可以正常工作,但是我在cygwin终端下运行它时遇到了问题(即bash从 启动cmd.exe)。
正如您从屏幕截图中看到的:
转义序列“按原样”输出,无需处理。另一方面,我可以轻松地运行 smth 之类的echo -e '\033[1;31mTest'- 并且彩色文本就在那里。
同时,如果我从Midnight Commander子shell启动完全相同的应用程序,应用程序生成的转义序列将被正确解释:
此外,如果我使用 SSH 登录到我的 Windows 机器(即用远程连接替换本地连接,但保留相同的cygwin终端),同样,转义序列处理得很好。
看起来当创建某种类型的子外壳(mc或ssh)时,终端会被置于其他模式。但是玩与stty没有帮助,也没有 export'ing TERM=ansi。
任何人都可以请提出任何解决方案吗?
我在跑
CYGWIN_NT-6.3 UNIT-725 2.5.1(0.297/5/3) 2016-04-21 22:14 x86_64 Cygwin
Run Code Online (Sandbox Code Playgroud)
和 Windows 8.1。
诸如resize询问终端其大小之类的程序。最终,他们将向标准输出发送一些(ANSI)转义序列,并期望终端对这些序列本身做出反应,返回一些字节。
该机制的效果通过以下交互式 Python 代码片段可见:
\n\n>>> print('\\x1b[21;t')\nRun Code Online (Sandbox Code Playgroud)\n\nGnome 终端将在标准输入上插入与窗口标题相关的可见内容。
\n\n哪个脚本片段将促使终端写入\xe2\x80\x99s 大小(以字符为单位)?如果返回的大小不可见,则应进行一些简单的转换才能看到某些内容。Shell、Python、Perl,任何语言都可以。由于这将是特定于终端的,因此任何常见的终端仿真器都可以(例如 xterm、gnome-terminal、terminator 等)。
\n\n澄清:我不关心告诉我大小的程序。我知道 TIOCGWINSZ,它不能通过串行线路工作。我想查看使用转义序列的代码,它实际上在串行线路上工作。
\n我正在使用 VSCode 1.51(此时为最新版本),并且在terraform plan ..从集成 PowerShell(此工作站上为 5.1)运行时,我注意到如果我将输出重定向到文本文件,可以通过运算符 ( .. > .\a.txt) 或通过 Tee-Object ( .. | Tee-Object -FilePath .\a.txt) 生成的输出文件被ASCII 转义序列破坏;特别是通过控制序列引入器 (CSI) 序列,例如 ESC[1m。到目前为止,在我看到的输出文件中,我仅观察到以下 6 个序列:
- ESC[0m
- ESC[1m
- ESC[4m
- ESC[31m
- ESC[32m
- ESC[33m
Run Code Online (Sandbox Code Playgroud)
我正在使用 Notepad++ 7.8.7 读取文件,如何用单个空格字符 (' ') 替换上述序列?
更新
显然,如果能够从terraform plan输出中删除 ASCII 转义序列那就更好了。
尝试使用jqANSI 颜色代码。
测试用例:
$ echo '{"a":"b","c":"d"}' | jq -r .c
d # Matches my expected output
$ echo '{"a":"b","c":"\033[31md\033[0m"}' | jq -r .c
parse error: Invalid escape at line 1, column 31 # returns err code 4
$ echo '{"a":"b","c":"d"}' | jq -r '"foo"+.c+"bar"'
foodbar # Correct
$ echo '{"a":"b","c":"d"}' | jq -r '"\033[31m"+.c+"\033[0m"'
jq: error: Invalid escape at line 1, column 4 (while parsing '"\0"') at <top-level>, line 1:
"\033[31m"+.c+"\033[0m"
jq: error: Invalid escape at line 1, …Run Code Online (Sandbox Code Playgroud) 我想在编程中模拟退格键并按如下方式实现。
// del.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "123456";
cout << "\b\b\b" /* backspace key */<< '\x7f' /* DEL key */ << '\x7f' << '\x7f';
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我得到这样的结果

如何获得如下所示的结果而不需要用空格替换尾部
123
Run Code Online (Sandbox Code Playgroud)
也就是说如何删除而不是替换光标后退格的那些字符。
在不支持ANSI转义码的终端中,输出\033[0m这样的颜色控制码不仅没有任何效果,还会干扰终端。
我知道一个json格式化工具叫jq,它判断终端是否可以使用ANSI转义码。
我想知道,如何通过C语言实现这个功能?
我使用 bash 脚本 ( konsole-name.sh ) 来更改终端名称,如下所示:
#!/usr/bin/bash
echo -en "\e]30;$1\a"
Run Code Online (Sandbox Code Playgroud)
我想使用与检查 GPU 温度相同的 perl 脚本方法,以便定期更新窗口标题。
然而我没有找到方法。我尝试了这两个:
$comm='echo -en "\e]30;T=$t\a"';
`$comm`;
Run Code Online (Sandbox Code Playgroud)
这是使用我的 bash 脚本:
$comm="konsole-name.sh T=$t";
`$comm`;
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到吗?
我有一个stringbuilder带有转义序列的设置来显示像艺术到文本的ASCII.我正在使用ASP.NET Web窗体.这是我的代码:
sb.AppendLine(@" _____ ______ ___ ___ ________ ");
sb.AppendLine(@" |\ _ \ _ \|\ \|\ \|\ ___ \ ");
sb.AppendLine(@" \ \ \\\__\ \ \ \ \\\ \ \ \_|\ \ ");
sb.AppendLine(@" \ \ \\|__| \ \ \ \\\ \ \ \ \\ \ ");
sb.AppendLine(@" \ \ \ \ \ \ \ \\\ \ \ \_\\ \ ");
sb.AppendLine(@" \ \__\ \ \__\ \_______\ \_______\ ");
sb.AppendLine(@" \|__| \|__|\|_______|\|_______| ");
sb.AppendLine(@" ");
Run Code Online (Sandbox Code Playgroud)
这是输出:
_____ ______ …Run Code Online (Sandbox Code Playgroud)