我想创建一个python shell脚本myscript.py
,它可以将输出提供给管道或接收管道的输入,不止一次。例如。可连接的python shell脚本,可以多次使用
$ myscript.py | myscript.py | myscript.py ...
下面只有实施有效程度有限:
$ myscript.py
NO INPUT
(ok)
$ echo 'hello' | myscript.py
GOT INPUT >>> hello
(ok)
$ myscript.py | myscript.py
NO INPUT
(not ok, should be)
NO INPUT
GOT INPUT >>> NO INPUT
这里是myscript.py的内容:
#!/usr/bin/env python
if __name__=="__main__":
import sys,os
if (os.fstat(sys.stdin.fileno()).st_size > 0):
stdincontents=sys.stdin.read()
print "GOT INPUT >>> " + stdincontents
else:
print "NO INPUT"
我觉得这是一个根本性的问题:剧本要么必须_block_等待输入,或终止因为没有输入。您描述它的方式,您希望链中的第一个进程写入“NO INPUT”并终止 - 但您希望链中的其他进程阻塞并等待。但由于它们都是相同的程序,它们具有相同的行为,所以稍后链中的一些过程也会死于不输入和终止,关闭管道。所以我不明白它是如何工作的。 – wim 2014-12-04 01:31:31
没有阻塞。我只是需要一种方法来将我的新python软件系统分解为模块化元素,并且我想模仿管道化的shell过程。保持架构简单。 @thatotherguy的回答正是我所需要的。在他的例子中,当没有输入时他会添加提示,可能是为了说明测试是否有输入。由于我不想任何阻塞,我会简单地用'if(os.isatty(0)):<替代输入,像命令行参数等'替换它。我不知道我是如何意外地给我留下了印象。 – 2014-12-04 02:44:04