Подтвердить что ты не робот

Вывод пейджинга из отчета печати

Я стараюсь добиться этого:

>>>print "SOME_VERY_LONG_TEXT" | more

Конечно, он не работает в Python 2.7 (IDLE).

Кроме того, я попытался выполнить pager 1.2 page(), но я не знаю, как заставить его работать правильно.

Любые идеи?

[ОБНОВЛЕНИЕ]

Я нашел ленивый способ:

import pydoc
pydoc.pager("SOME_VERY_LONG_TEXT") 
4b9b3361

Ответ 1

Написание чего-то терминального и независимого os может быть более сложной задачей.

Но если вы можете получить высоту терминала, вы можете использовать что-то вроде этого. Предполагая, что ваш вход является генератором/списком разделимого текста, иначе вы можете вызвать text.split('\n') перед вызовом этой функции

def pagetext(text_lined, num_lines=25):
   for index,line in enumerate(text_lined):
       if index % num_lines == 0 and index:
           input=raw_input("Hit any key to continue press q to quit")
           if input.lower() == 'q':
               break
       else:
           print line

Также есть pager модуль на pypy не использовал его, но автор говорит, что он должен был быть включен в стандартный библиотека.

Ответ 2

Вы можете назвать это внешним процессом. (Вы должны быть осторожным с shell=True, хотя.)

import subprocess
longStr = 'lots of text here'
subprocess.call(['echo "'+longStr+'" | more'], shell=True)

Ответ 3

Хотя немного поздно, для меня работало следующее:

def less(data):
    process = Popen(["less"], stdin=PIPE)

    try:
        process.stdin.write(data)
        process.communicate()
    except IOError as e:
        pass