我想創建一個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