Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paging output from print statement

I'm essentially trying to achieve this:

>>>print "SOME_VERY_LONG_TEXT" | more

Of course, it doesn't work in Python 2.7(IDLE).

Also, I tried pager 1.2's page() function, but I don't know how to get it to work correctly.

Any ideas?

[UPDATE]

I found a lazy way, as follows:

import pydoc
pydoc.pager("SOME_VERY_LONG_TEXT") 
like image 386
Matt Elson Avatar asked Nov 05 '12 07:11

Matt Elson


3 Answers

You could call it as an external process. (You have to be careful with shell=True, though.)

import subprocess
longStr = 'lots of text here'
subprocess.call(['echo "'+longStr+'" | more'], shell=True)
like image 143
Matthew Adams Avatar answered Nov 17 '22 04:11

Matthew Adams


Although a bit late, the following worked for me:

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

    try:
        process.stdin.write(data)
        process.communicate()
    except IOError as e:
        pass
like image 4
urban Avatar answered Nov 17 '22 06:11

urban


Writing something terminal and os independent might be a bigger task.

But if you can get the height of the terminal then you can use something like this this Assuming your input is a generator/list of line seperated text, or else you can call text.split('\n') before calling this function

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

Also there is a pager module on pypy haven't used it but the author says it was supposed to be included in the standard library.

like image 2
anijhaw Avatar answered Nov 17 '22 04:11

anijhaw