シンプルなパーツ:サーバー側は、サーバー自体がサブプロセスの中にそのファイルを読んでいました
import sys
print("output will be redirected")
# stdout is saved
save_stdout = sys.stdout
fh = open("output.txt","w")
sys.stdout = fh
、ファイルへのサーバーのstdout
とstderr
をリダイレクトすることができます。
f = subprocess.Popen(['tail','-F',"output.txt", '-n1'],\
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p = select.poll()
p.register(f.stdout)
と、次のネジ:
while True :
if p.poll(1):
output+=f.stdout.readline()
あなたはまた、tail
今の代わりにシステムのtailhead
またはtailer
ライブラリを使用することができますが、問題は標準出力であるということですアクティブパイプの種類とoutput
は永遠に成長するので、その出力バッファのフレームだけを保持する必要があります。
このウィンドウに接続できるユーザーが1人しかいない場合は、そのクライアントに送信するとすぐに出力をフラッシュする可能性があるため、問題は異なります。ターミナルウィンドウと多重化されたリモートターミナルウィンドウの違いを参照してください。
フラスコは分かりませんが、クライアント側では、完全なログを要求するajaxリクエストで毎秒サーバーをポーリングするjavascriptが必要です(または一意のクライアントの場合 - バッファを追加する必要があります) DOMへ)。 Webソケットを使用することもできますが、絶対必要はありません。
2つの間で妥協が可能であり(リアルタイムで付加/多重化された無限のログ)、クライアントごとに個別の出力バッファを保持する必要があります。
おそらくipython --notebookのようなものを使うべきでしょう。これは私が考えると思います... –
フラスコのリアルタイムデータですか?ストリーミングデータにすべてのチェーンを適用する理由リアルタイムデータは決して得られません。関連するセッションでストリーミングするために外部スレッド+ソケットを開始します。 – dsgdfg