我正在尝试实现类似的东西git log,如果日志有一定的长度,它只会分页输出.如果你不熟悉git,我基本上是想实现这个:
python some_script.py | less
Run Code Online (Sandbox Code Playgroud)
在python2.6/pydoc.py的分页实现的帮助下,我能够想出这个:
import os
text = '...some text...'
pipe = os.popen('less', 'w')
pipe.write(text)
pipe.close()
Run Code Online (Sandbox Code Playgroud)
这很好用,但os.popen()已被弃用.我考虑过写一个临时文件并用它的路径调用较少,但这似乎并不理想.子进程可以实现吗?还有其他想法吗?
编辑:
所以我已经让子进程工作了.我能够给它文本变量Popen.communicate(text),但由于我真的想重定向打印语句,我已经解决了这个问题:
import os, sys, subprocess, tempfile
page = True
if page:
path = tempfile.mkstemp()[1]
tmp_file = open(path, 'a')
sys.stdout = tmp_file
print '...some text...'
if page:
tmp_file.flush()
tmp_file.close()
p = subprocess.Popen(['less', path], stdin=subprocess.PIPE)
p.communicate()
sys.stdout = sys.__stdout__
Run Code Online (Sandbox Code Playgroud)
当然,我最终将它包装成函数.有没有人看到这个问题?
ral*_*hei 37
这个怎么样:
import pydoc
text = '... some text ... '
pydoc.pager(text)
Run Code Online (Sandbox Code Playgroud)
这(在我的opensuse linux框中)将文本发送到寻呼机(在我的情况下为'less'),并且与在Python解释器中调用"help(... python command ...)"的工作方式相同.
使用 subprocess.Popen 代替。
http://docs.python.org/library/subprocess.html#subprocess-replacements
http://docs.python.org/library/subprocess.html#subprocess.Popen
os.popen 文档中甚至有关于此的注释。
http://docs.python.org/library/os.html#os.popen
| 归档时间: |
|
| 查看次数: |
10069 次 |
| 最近记录: |