我想通过这样的管道读取进程的输出:
./backup.sh | my-python_program.py
我的python程序目前从stdin中读取:
buff = sys.stdin.read()
虽然这看起来很幼稚但似乎阻止了需要很长时间才能执行的脚本。还有更好的方法吗?
答案 0 :(得分:1)
不确定python是如何包装它的,但你会想要使用select()的超时值很小。
答案 1 :(得分:0)
管道被明确设置为阻止,并且在大多数情况下它是有意义的 - 你的程序在没有读取输入时是否还有其他东西可以做?
如果是这样,那么你可以查看异步I / O,如果你要在python中这样做,我建议使用[gevent
[(http://www.gevent.org/)让您使用轻量级线程来执行高效的异步I / O:
import gevent
from gevent import monkey; monkey.patch_all()
def read_from_stdin():
buff = sys.stdin.read()
# Whatever you're going to do with it
def some_other_stuff_to_do():
# ...
pass
gevent.Greenlet(read_from_stdin).run()
gevent.Greenlet(some_other_stuff_to_do).run()