有时我们在终端运行一个命令,结果输出太大,最后忘了放“|less”。所以我想知道当zsh中的输出太大时是否可以分页输出?
我尝试通过使用 python 和 less 来实现此功能:
#!/usr/bin/env python3
termHeight = 25
import sys
from subprocess import Popen, PIPE
p = Popen(['unbuffer'] + sys.argv[1:], stdin=PIPE, stdout=PIPE)
lines = []
for count in range(termHeight):
line = p.stdout.readline()
if not line:
break
print(line.decode('utf8'), end='')
lines += [line]
if line:
q = Popen(['less', '-Mr'], stdin=PIPE)
q.stdin.writelines(lines)
while True:
line = p.stdout.readline()
if not line:
break
q.stdin.write(line)
q.communicate()
让我们将这个 python 脚本保存到 p.py。所以当我们运行像“python p.py ls --help”这样的“python p.py some commands”时,如果输出超过25行,这个脚本将使用less来显示输出。
问题是我无法从用户那里获得输入。这意味着该解决方案根本不适用于交互式程序。