在命令行程序中创建“可滚动”输出

问题描述 投票:0回答:3

我有一个程序可以输出 300-1000 行数据。我希望它有一个类似手册页的界面,而不是一次性输出所有内容,它将显示前 50 行左右的输入,然后用户可以按“f”或“b”键浏览页。有没有办法在Python中做到这一点?

注意:我想分发程序,并且不想强迫用户将输出通过管道传输到 less/more。此外,输出发生在程序的中间,并不是程序的唯一输出,所以我不确定这是否有效。

python
3个回答
3
投票

你可以做一些非常基本的事情,比如:

# pseudocode 
def display_text(text):
    lines = text.splitlines()
    while lines remaining:
        display next N lines
        wait for key press

要“等待按键”,您可以执行以下操作:http://www.daniweb.com/software-development/python/threads/123777/press-any-key-to-continue


2
投票

注意:我永远不会这样做,我认为这是非常糟糕的 UIX,但是......

pager = subprocess.Popen(['less'], stdin=subprocess.PIPE)

然后将所有命令的输出写入类似文件的对象:

pager.stdin


0
投票

详细阐述@JaceBrowning 的答案:

def display_long_text(text, n=20):
        """Used to display long text blobs."""
        lines = text.splitlines()
        while lines:
            print("\n".join(lines[:n]))
            lines = lines[n:]
            if lines:
                input("")

这给了我与普通

print()
相同的输出。
less
对我不起作用,因为我的文本 blob 中有非标准字符。

© www.soinside.com 2019 - 2024. All rights reserved.