【问题标题】:How do I print colored ANSI characters?如何打印彩色 ANSI 字符?
【发布时间】:2020-06-12 19:58:30
【问题描述】:

我正在为我正在处理的项目开发一个带有 Flask 和 flask_restful 的 API 和一个匹配的 CLI,现在我遇到了一些我无法摆脱的问题。在 API 方面,当我在某个端点上收到请求时,我使用 PrettyTable 库在终端上构建彩色表格。我正在按如下方式构建表格:

t = PrettyTable([ Color.CGREEN2 + 'Username' + Color.CEND,
                  Color.CGREEN2 + 'Dataset'  + Color.CEND,
                  Color.CGREEN2 + 'Files' + Color.CEND])
for ds in db.getAllDatasets( username ):
  t.add_row(  [username, ds.dataset, len(ds.files)] )
return t.__str__()

我尝试返回 t 对象,但它不是 JSON 可序列化的。通过调用 __str__ 方法,我能够成功返回它,但无法在终端上正确打印输出。我使用的代码是:

try:
  r = requests.post(url='http://my-server:my-port/my-endpoint', data=data)
  print (str(r.text))
except requests.exceptions.ConnectionError:
  MSG_ERROR (self, "Failed to connect to LPS Cluster.")

我得到的输出是:

"+----------+---------+-------+\n| \u001b[92mUsername\u001b[0m | \u001b[92mDataset\u001b[0m | \u001b[92mFiles\u001b[0m |\n+----------+---------+-------+\n+----------+---------+-------+"

可以看到字符在正确的位置,它应该可以工作,但它没有。

我猜这可能与字符串开头和结尾的引号有关,但我不确定也不知道该怎么办。

你们能帮我搞定吗?

【问题讨论】:

  • 如果它已经是一个字符串,那么就不需要打印它的表示了。
  • 其实就是一个
  • 您使用的是哪个版本的漂亮表格?
  • 我注意到它有一个 get_string() 方法,但它得到相同的输出。
  • 试试return t.get_string()print(r.get_string()

标签: python python-3.x string colors flask-restful


【解决方案1】:

嗯,我找到了修复它的方法。在 API 方面,我通过以下方式将响应转换为 JSON:

return jsonify(
    error_code=HTTPStatus.OK,
    message=t.get_string()
)

而不是我之前的return t.__str__()

然后,在 CLI 上,我这样做:

print (r.json()['message'])

它就像一个魅力!

谢谢大家。

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2016-08-17
    • 2021-12-04
    相关资源
    最近更新 更多