如何转换子流程.Popen()?

2024-05-23 14:22:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用执行命令子流程.Popen()并使用以下代码提取结果。在

proc = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
gadgets = out.split('\n')

结果是一个字符串,可以根据结果中的换行符拆分为多行。为了简单起见,我们假设代码片段中的gadgets变量是两个字符串的列表。当我在控制台上使用python print()函数打印列表中的单个项目时,我得到的是如下所示的普通ascii文本。在

^{pr2}$

输出:

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()函数使用了什么样的编码?谢谢您!在


Tags: 项目函数字符串代码文本编码列表ascii
1条回答
网友
1楼 · 发布于 2024-05-23 14:22:33

第二个输出具有ANSI转义字符作为颜色。从第二个输出中删除ANSI转义字符将提供第一个输出。在

这个链接[https://stackoverflow.com/a/14693789/3114833]描述了删除ANSI转义字符的方法。以下代码是从链接复制的。在

import re

ansi_escape = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
ansi_escape.sub('', sometext)

相关问题 更多 >