我使用
less
作为寻呼机,以便可以轻松读取应用程序的输出。我像这样创建子流程:
a_process = subprocess.Popen(["less"], stdin=subprocess.PIPE)
然后我像这样写入寻呼机(多行):
a_process.stdin.write("hello\n".encode())
a_process.stdin.flush()
在完成执行之前,我调用
a_process.wait()
,用户可以按预期上下移动......如果用户点击 q
,寻呼机结束,Python 应用程序结束,因为 Python 中没有更多内容脚本....但是,如果用户到达我提供给less
的输出的末尾,UI就会冻结....用户无法上升,无法退出使用
q
.. .只有
ctrl-c
才能完成执行。为了避免达到这种状态,我缺少哪一部分?
less
不知道它已经到达 EOF,它正在等待更多输出来填满下一页。要告诉它输出已完成,请关闭管道:
close(a_process.stdin)