解析带有特殊字符的字符串(subprocess.run stdout)

问题描述 投票:0回答:1

我正在获取 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 / 字典列表)。

这不可能这么难——我肯定错过了一些微不足道的东西。对吗?

python json string subprocess decoding
1个回答
0
投票

您会看到 ANSI.SYS 颜色代码,使输出在 shell 中看起来很漂亮。

有两种解决方案。第一个是为 gh api 找到一个参数,告诉它不要添加颜色代码。这会给你一个干净的输入。另一种解决方案是使用正则表达式从数据流中剥离代码

© www.soinside.com 2019 - 2024. All rights reserved.