格式化终端

时间:2017-10-31 19:25:49

标签: python-3.x

我正在为自己编写命令行工具,需要在终端上打印一些信息。我对整个格式有点恼火。这是我的例子。

formatter = logging.Formatter(fmt = '%(message)s')

console_logger = logging.getLogger("console_logger")
console_logger.setLevel(logging.DEBUG)

console_logger_handler = logging.StreamHandler()

console_logger_handler.setFormatter(formatter)

console_logger.addHandler(console_logger_handler)
console_logger.propagate = False

这里有一些代码,然后我有打印功能

for element in open_orders:
    console_logger.info("Type: {}, Rate: {}, amount: {}, state: {}, pair: {}/{}, creation: {}, id: {}".format(element.type,
                                                      element.rate,
                                                      element.amount,
                                                      element.state,
                                                      element.currency_pair.get_base_currency().upper(),
                                                      element.currency_pair.get_quote_currency().upper(),
                                                      creation_time,
                                                      element.order_id)) 

我更愿意将此作为输出在冒号处对齐的列。在每个element之后,一行下划线或减号也会很好,这应该尊重终端宽度。我知道这可以用某种方式硬编码,但是不是有更好的方法吗?某种可以处理多线输出的模板引擎?

编辑: 所以这是一个例子:

Type        :        buy
Rate        :       1234
amount      :          1
state       :     active
pair        :    usd/eur
creation    : 2017.12.12

我知道这可以用format逐行打印,但我需要自己确定最长字符串的长度,我想知道是否有一个框架或更优雅的东西为我做这个。     id:123456

3 个答案:

答案 0 :(得分:0)

使用format,添加您的数据:

for element in open_orders:
    console_logger.info("Type: {:25s}, Rate: {:25s}, amount: {:07.2f}, state: {:25s}, pair: {:25s}/{:25s}, creation: {:25s}, id: {:25s}".format(element.type,
                                                      element.rate,
                                                      element.amount,
                                                      element.state,
                                                      element.currency_pair.get_base_currency().upper(),
                                                      element.currency_pair.get_quote_currency().upper(),
                                                      creation_time,
                                                      element.order_id)) 

您还可以访问此网站:https://pyformat.info/

答案 1 :(得分:0)

此外,您可以尝试使用Colorama

你必须从pypi安装它。

它允许您处理 光标定位 ,因此您可以使用“坐标”控制要在屏幕(终端)上打印数据的位置。此外,您可以将颜色应用于文本,如果您愿意,可以为您提供清洁更漂亮的外观。

答案 2 :(得分:0)

所以我最终找到的内容至少在列表和格式化方面有很大帮助 terminaltable