forループの各インスタンスは、後で処理するために別のスクリプトで取り込む必要があるバイナリファイルの内容を吐き出します。たとえば、次のようにpython forループの1回の繰り返しによるパイプ出力
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を起動します。
script2.pyはscript1.pyから呼び出せません。両方のスクリプトは異なるドッカーコンテナで実行する必要があります。ドッカーコンテナ内にドッカーを設置することを避ける方がよいでしょう。
を理由だけではなく、2番目のスクリプトで直接 'stdin'を読んではなく、それを行うには、シェルを使用しようとしていませんか? (あなたは 'stdin'に接続していませんが、シェルでそれを行うことができますが、私はそれを最も無駄な猫の使い方と呼んでいます(http://porkmail.org/era/unix/award .html)これまでに見たことがあります。 – kindall
'script2.py'は、' script1.py'がそれらをどのように書き込むかにかかわらず、同じ連続したバイトストリームを見ています。 'script1.py'の出力にいくつかの追加バイトを挿入したり解析したりすることなく、異なるファイルからバイトを確実に区別することはできません。 – chepner
@chepner、何がうまくいくかの例を教えていただけますか? – Vishnu