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