私は2つのスクリプトを持っています。 (コードは次のとおりです)。最初のスクリプトは、遅延を伴う数字の印刷です。Python:出力するたびにサブプロセスの出力を取得し、終了しない方法
2番目のスクリプトは、最初のスクリプトをサブプロセスとして開始し、最初のスクリプトが数字を出力している場合はバックグラウンド(!)をチェックインし、そうであれば印刷します。
しかし、私が得るのは、最初のスクリプトが終了すると(20秒後)、各瞬間に1つの数字ではなく、すべての数字を一度に印刷するということです。
START
0
1
2
3
4
5
6
7
8
9
16:05:51
OVER
しかし、私は期待してのようなものです:: 出力は次のようである
START
0
16:05:51
1
16:05:53
2
16:05:55
3
16:05:57
4
16:05:59
5
16:06:01
6
16:06:03
7
16:06:05
8
16:06:07
9
16:06:09
OVER
どのように私はこの問題を解決することができますか?
コード:
1.py:
import time
for i in range(10):
print(i)
sys.stdout.flush()
time.sleep(2)
test.py:
from subprocess import Popen, PIPE, STDOUT
from time import strftime
import threading, sys
stream = Popen(['python', '1.py'], stdout=PIPE, stderr=STDOUT)
def a():
while True:
try:
out = stream.communicate()[0].decode("utf-8")
print(out, strftime("%H:%M:%S"))
sys.stdout.flush()
except ValueError:
print('OVER')
break
except:
raise
t = threading.Thread(target=a,)
t.start()
print('START')
この場合は 'communicate()'を使用する代わりに 'stream.stdout'をループします – mata
@mata どちらも動作しません。最初のスクリプトが完了するのを待ってから、すべてをすぐに出力します。 –
_also_は、最初のスクリプトで出力を定期的にフラッシュすることを確認する必要があります。 – mata