Pythonスクリプト自身の出力を、ページャーを咬ませて表示させてみました。
環境変数PAGERで使用するページャーを指定できます。
まずは本体
Python3.4環境で作成・確認しました。
使い方
main関数を2つの引数(arg1, arg2)で呼び出す次のようなプログラムの場合、
retval = main(arg1, arg2)
ページャーを使用するには次のようにします。
retval = with_pager(main, arg1, arg2)
ポイント
出力先がファイルやパイプなど画面以外の場合は、ページャーを咬ませたくないのでその判別を行います。
これはos.isatty()で行っています。
subprocess.Popen()に文字列ストリームを入力したい場合は、 universal_newlines=Trueパラメータが必須です。
with_pager() から呼び出される処理内で
sys.exit() が呼び出されると標準出力が回復されないので、
atexit
モジュールを使用してこれを回避しています。
ちなみに、出力がおかしくなった場合は、シェルから
stty sane
を実行すると回復できるかもしれません。(FreeBSD /DragonflyBSDで確認)