jfo*_*erg 5 python unix subprocess
我正在编写一个程序,使用Unix less(1)在终端上显示文本.以下是相关部分:
less = subprocess.Popen(['less -F -'], stdin=subprocess.PIPE,
stdout=sys.stdout, shell=True)
try:
less.stdin.write(rfc_text)
less.stdin.flush()
less.stdin = sys.stdin
less.wait()
except IOError:
less.terminate()
return errno.EPIPE
except KeyboardInterrupt:
less.terminate()
return 0
Run Code Online (Sandbox Code Playgroud)
在等待较少完成时,我会监听KeyboardInterrupt异常.如果我抓到一个,我用SIGTERM信号减少了,并退出我的程序.
现在,当发生这种情况时,我将返回到我的shell提示符,但shell不再回应我写的内容,我必须重置(1)以使其再次工作.
关于如何减少死亡而不将我的stdin带入坟墓的任何想法?完整的资源可以在https://github.com/jforberg/rfc/blob/master/rfc.py上找到
编辑:经过一些实验,我发现默认情况下,less(1)和man(1)都忽略了control-C笔划.所以简单地忽略它可能是一个可行的选择.我不确定我认为这是正确的做法,所以如果有人有建议我仍然非常感兴趣.
最简单的方法是要求用户less
正确退出(按q
):
#!/usr/bin/env python
from subprocess import PIPE, Popen
p = Popen(['less'], stdin=PIPE)
try:
p.communicate(''.join("%d\n" % i for i in range(1000)))
except KeyboardInterrupt:
print("Press `q` to exit.")
p.wait()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
412 次 |
最近记录: |