如何打印彩色ANSI字符?

时间:2020-02-28 17:08:35

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

我正在使用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+----------+---------+-------+"

有可能看到字符在正确的位置,并且应该可以,但不能。

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

你们能帮我弄对吗?

1 个答案:

答案 0 :(得分:1)

好吧,我找到了修复它的方法。在API方面,我通过执行以下操作将响应转换为JSON:

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

代替我以前的return t.__str__()

之后,在CLI上,我做了

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

它就像一种魅力!

谢谢大家。

相关问题