如何转换subprocess.Popen()返回的字符串的编码?
How to convert the encoding of a string returned by subprocess.Popen()?
我正在尝试使用 subprocess.Popen() 执行命令并使用以下代码提取结果。
proc = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
gadgets = out.split('\n')
结果是一个字符串,可以根据结果中的换行符拆分成几行。为简单起见,我们假设代码片段中的 gadgets 变量是两个字符串的列表。当我使用 python print() 函数在控制台上打印列表中的单个项目时,我得到的是正常的 ascii 文本,如下所示。
for item in gadgets:
print(item)
输出:
syscall;
xlatb; ret;
但是,当我打印列表时,我得到了不同类型的字符。输出结果如下:
print(gadgets)
输出:
['\x1b[1;33msyscall\x1b[0m\x1b[1;34m; \x1b[0m', '\x1b[1;33mxlatb\x1b[0m\x1b[1;34m; \x1b[0m\x1b[1;33mret\x1b[0m\x1b[1;34m; \x1b[0m']
我相信 print() 函数会以某种方式更改编码并在控制台上为各个项目打印正常的 ascii 文本。谁能告诉我 print() 函数在这种情况下使用了哪种编码?谢谢!
第二个输出具有用于颜色的 ANSI 转义字符。从第二个输出中删除 ANSI 转义字符将提供第一个输出。
这篇link[已经描述了去除ANSI转义字符的方法。以下代码是从link.
复制过来的
import re
ansi_escape = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
ansi_escape.sub('', sometext)
我正在尝试使用 subprocess.Popen() 执行命令并使用以下代码提取结果。
proc = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
gadgets = out.split('\n')
结果是一个字符串,可以根据结果中的换行符拆分成几行。为简单起见,我们假设代码片段中的 gadgets 变量是两个字符串的列表。当我使用 python print() 函数在控制台上打印列表中的单个项目时,我得到的是正常的 ascii 文本,如下所示。
for item in gadgets:
print(item)
输出:
syscall;
xlatb; ret;
但是,当我打印列表时,我得到了不同类型的字符。输出结果如下:
print(gadgets)
输出:
['\x1b[1;33msyscall\x1b[0m\x1b[1;34m; \x1b[0m', '\x1b[1;33mxlatb\x1b[0m\x1b[1;34m; \x1b[0m\x1b[1;33mret\x1b[0m\x1b[1;34m; \x1b[0m']
我相信 print() 函数会以某种方式更改编码并在控制台上为各个项目打印正常的 ascii 文本。谁能告诉我 print() 函数在这种情况下使用了哪种编码?谢谢!
第二个输出具有用于颜色的 ANSI 转义字符。从第二个输出中删除 ANSI 转义字符将提供第一个输出。
这篇link[已经描述了去除ANSI转义字符的方法。以下代码是从link.
复制过来的import re
ansi_escape = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
ansi_escape.sub('', sometext)