ディスク上に中間ファイルを作成せずに、からscript1.py
にデータを継続的にストリーミングしたいと思いscript2.py
ます。私がやろうとしていることの例は次のとおりです。
script1.py
import time
import sys
for i in range(5):
print i # stream of data
print 'eof' # marker to separate files
sys.stdout.flush()
time.sleep(1)
このスクリプトの出力は、私が望むことを正確に実行します。0〜4は、1秒のスリープ期間で印刷されます。
私は希望script2.py
からの収集データにscript1.py
、「EOF」文字列になるまで、それはすぐに標準出力およびデータの次のバッチを待つ書きます。
script2.py
import time
import sys
data= sys.stdin.read()
sys.stdout.write(data)
sys.stdout.flush()
time.sleep(1)
実行しようとすると:
python script1.py | python script2.py
script2.py
script1.py
(0-4)からのデータ全体を待機してから、一度に1つの数値ではなく、一緒にstdoutに書き込みます。fromのscript2.py
後stdout.flush
からデータをstdoutすることは可能script1.py
ですか?
コメントに基づく更新:
両方のスクリプトが異なるDockerコンテナーに配置されており、Dockerコンテナー内にDockerをインストールしないようにしたいため、script2.py
から呼び出すことはできませんscript1.py
。
一度に1行を読んreadline
でscript2.py
:
import time
import sys
while True:
data = sys.stdin.readline()
sys.stdout.write(data)
sys.stdout.flush()
time.sleep(1)
表示されるたびに数字のみを出力するバージョンeof
:
import time
import sys
data = ''
while True:
line = sys.stdin.readline()
if line.strip() != 'eof':
data += line
continue
else:
sys.stdout.write(data)
sys.stdout.flush()
time.sleep(1)
data = ''
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加