我正在获取 CLI 调用的输出(对于上下文 GithubAPI)
命令:
import subprocess
j = subprocess.run("gh api /orgs/{__org__}/teams", shell=True, stdout=subprocess.PIPE, text=True)
j.stdout
对象是具有 API 响应的 str
类型。
然后我打印它
print(j.stdout)
它打印得很好:
{
"name": "Devs",
"id": {___VALUE HIDDEN____},
"node_id": "{___VALUE HIDDEN____}",
"slug": "devs"
...
但是当我尝试原始使用它时
s
编码全部错误。
'\x1b[1;38m[\x1b[m\n \x1b[1;38m{\x1b[m\n \x1b[1;34m"name"\x1b[m\x1b[1;38m:\x1b[m \x1b[32m"Devs"\x1b[m\x1b[1;38m,\x1b[m\n \x1b[1;34m"id"\x1b[m\x1b[1;38m:\x1b[m {___VALUE HIDDEN____}\x1b[1;38m,\x1b[m\n \x1b[1;34m"node_id"\x1b[m\x1b[1;38m:\x1b[m \x1b[32m"{___VALUE HIDDEN____}"\x1b[m\x1b[1;38m,\x1b[m\n \x1b[1;34m"slug"\x1b[m\x1b[1;38m:\x1b[m \x1b[32m"devs"\x1b[m\x1b[1;38m,\x1b[m\n ...
我今天花了很大一部分时间在像这样的字节解码和编码的兔子洞中,开始尝试手动清理一些控制字符(例如
\x1b
)。
我怎样才能获得干净的底层数据,以便我可以将其解析为数据结构(它是 JSON / 字典列表)。
这不可能这么难——我肯定错过了一些微不足道的东西。对吗?
您会看到 ANSI.SYS 颜色代码,使输出在 shell 中看起来很漂亮。
有两种解决方案。第一个是为 gh api 找到一个参数,告诉它不要添加颜色代码。这会给你一个干净的输入。另一种解决方案是使用正则表达式从数据流中剥离代码。