Skip to content

Latest commit

 

History

History
94 lines (57 loc) · 3.72 KB

cn_README.md

File metadata and controls

94 lines (57 loc) · 3.72 KB

reprint reprint

reprint 是一个适用于 Python 2/3 的简易变量绑定与多行输出刷新的库

模块内对于 Unicode 字符宽度的计算参考了 urwid项目 内的解决方案

特性

  • 同时支持 Python 2/3
  • 简易变量绑定,内容修改时自动刷新命令行输出
  • 多行输出刷新,实现不同行内容由独立变量控制,修改特定变量即能刷新命令行中特定行的内容
  • 多线程安全,使用了 threading.Lock 实现线程安全

安装

pip install reprint

DEMO

Demo_gif

使用说明

  1. 导入 output 对象
from reprint import output
  1. 使用 Python 的 with 语句来进行输出对象的初始化与对象控制,其中 output 对象包含以下参数可选:

    • output_type: "list""dict", 分别对应 list 模式与 dict 模式, 默认为 "list"
    • initial_len: int, 只在 list 模式下有效,指定 list 的初始长度,便于直接使用下标修改而不需初始化, 默认为 1
    • interval: int, 指定输出的刷新最小间隔,只有两次刷新间隔的毫秒数大于此数才会触发命令行输出刷新, 默认为 0
    with output(output_type="list", initial_len=1, interval=0) as output_list:
  2. 修改 output_list 对象内的内容即会刷新命令行内容

注意事项

  • with 块内,任何 printloggingException 等其他命令行输出都可能会导致输出格式异常,如果需要追加内容,请使用 output 对象的 append 函数(list 与 dict 模式都可用)

  • 在 dict 模式的 output 对象中包含一个名为 sublistlist 对象,用于在 dict 模式中追加内容。你可以通过 output.sublist 来直接操作修改其内容。

  • 请勿直接给 output 对象赋予 listdict 等对象,如果需要整体内容替换,请使用 output 对象的 change 函数(list 与 dict 模式都可用)

  • 当输出内容行数超过当前命令行高度时会导致消息清除不完整。所以若在意输出完成后,命令行的整洁度,请注意控制输出内容的行数。

    • 或者你可以选择使用 force_single_line ,强制输出内容不会换行。
    with output(output_type="list", initial_len=1, interval=0, force_single_line=True) as output_list:
  • 线程内调用请注意线程的初始化应被包含在 with 代码块内

  • 由于需要获取终端宽度,在非终端环境无法正常使用,非终端环境转化为普通命令行输出

  • 不支持 IDLE 以及其他无法获取到终端大小的环境

常见问题

Q: 我想在使用 dict 模式时用自己的排序函数对输出的行进行排序,如何实现?

A: 你可以在初始化 output 对象的时候用 sort_key 参数来传递你自己的排序函数,例如:

with output(output_type='dict', sort_key=lambda x:x[1]) as output_lines:

之后 reprint 就会使用你所传入的函数来作为 sorted 函数的 key 参数,对输出的行进行排序:

elif isinstance(content, dict):
    for k, v in sorted(content.items(), key=sort_key):
        print("{}: {}".format(k, v))

Q: 如何禁用所有的警告信息?

A: 你可以在初始化 output 对象的时候指定 no_warning 参数为 True 来禁用警告,例如:

with output(no_warning=True) as output_list: