[英]Pipe output of one iteration of a python for loop to another script
for循環的每個實例吐出一個二進制文件的內容,該文件應由另一腳本捕獲以進行進一步處理。 例如:
script1.py
filename = glob.glob('*.txt')
for i in range(len(filename)):
with open(filename[i], 'rb') as g:
sys.stdout.write(g.read())
script2.py
from subprocess import call
script = "cat > test.fil"
call(script,shell=True)
命令:
python script1.py | python script2.py
如果執行此命令,它將等待所有迭代完成,然后再將輸出傳遞到script2.py。 我希望分批完成。 例如,將來自一個二進制文件的數據推送到stdout后,啟動script2.py。
無法從script1.py調用script2.py。 這兩個腳本都需要在不同的Docker容器中運行 。 最好避免在Docker容器內安裝docker。
如果sys.stdout
連接到管道,則默認情況下它將緩沖。 您必須調用sys.stdout.flush()
刷新輸出:
sys.stdout.write(g.read())
sys.stdout.flush()
您的第二個腳本也可以直接讀取stdin,而不是喚起shell來喚起cat來讀取它。 按照您編寫的方式,您正在執行3個進程(python,shell,cat)。
import shutil
import sys
with open('test.fil', 'w') as f:
shutil.copyfileobj(sys.stdin, f)
在一個不相關的音符,你並不需要使用for
在數字環路range
,當你要使用數只索引list
。 for
循環可以直接在list
元素中進行迭代:
filenames = glob.glob('*.txt')
for filename in filenames:
with open(filename, 'rb') as g:
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.