私は本質的にこれを達成しようとしています:
>>>print "SOME_VERY_LONG_TEXT" | more
もちろん、Python 2.7(IDLE)では動作しません。
また、 pager 1.2の機能を試しpage()
ましたが、正しく機能させる方法がわかりません。
何か案は?
[アップデート]
私は次のように怠惰な方法を見つけました:
import pydoc
pydoc.pager("SOME_VERY_LONG_TEXT")
私は本質的にこれを達成しようとしています:
>>>print "SOME_VERY_LONG_TEXT" | more
もちろん、Python 2.7(IDLE)では動作しません。
また、 pager 1.2の機能を試しpage()
ましたが、正しく機能させる方法がわかりません。
何か案は?
[アップデート]
私は次のように怠惰な方法を見つけました:
import pydoc
pydoc.pager("SOME_VERY_LONG_TEXT")
少し遅れましたが、次のことがうまくいきました。
def less(data):
process = Popen(["less"], stdin=PIPE)
try:
process.stdin.write(data)
process.communicate()
except IOError as e:
pass
外部プロセスとして呼び出すことができます。(ただし、注意が必要ですshell=True
。)
import subprocess
longStr = 'lots of text here'
subprocess.call(['echo "'+longStr+'" | more'], shell=True)
何か端末や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
また、pypyにはまだ使用されていないページャーモジュールがありますが、作者はそれが標準ライブラリに含まれているはずだったと言います。