Как распечатать цветные символы ANSI? - PullRequest
2 голосов
/ 28 февраля 2020

Я разрабатываю API с Flask и flask_restful и соответствующим 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 Ответ

1 голос
/ 28 февраля 2020

Ну, я нашел способ исправить это. На стороне API я превращаю ответ в JSON, выполнив:

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

вместо моего предыдущего return t.__str__().

После этого на CLI я делаю:

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

и это работает как шарм!

Спасибо всем.

...