簡體   English   中英

將python for循環的一個迭代的輸出管道傳輸到另一個腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM