0

最近、Flask フレームワークを使用して HTTP 経由でプロセスを開始する短い Python スクリプトを開発しました (こちらを参照)。ここで、開始されたプロセスの標準ストリーム (特にstdoutstderrに関心があります) を Web に「パイプ」するための適切なテクノロジについての質問があります。

これを達成するための最も適切な方法は何だと思いますか? 最初に、完全に適合する websocket を考えました。しかし、ほとんどの実装は、接続されたクライアントを覆い隠しているように思えました。それらすべてに出力を送信できるようにするために、この情報が必要だと思います。

編集:私の質問は少し不明確だったと思います:実行されたコマンドの出力をWebインターフェースで見たいです。したがって、実行されたプロセスの stdout/stderr から HTTP を介して何らかの方法で Web インターフェイスにデータを「伝達」する必要があります。開始されたコマンドが、ある程度の (より長い) 時間実行される可能性があります。コマンドを呼び出す例ddは、指定された設定で何も出力しないため、代表的なものではありません。確かに、subprocess.Processクラスとオブジェクトの出力を使用する必要があります (たとえば、communicate()メソッドを使用して)。

4

2 に答える 2

1

あなたの目標が何であるかはあまり明確ではありません。あなたのコードにはこれがあります。おそらくそれは手がかりですか?

   current_app.process = subprocess.Popen(
            ['dd', 'if=/dev/zero', 'of=/dev/null'])

サブプロセスのドキュメントをトロールします。stdout と stderr を指定できることがわかります。 http://docs.python.org/library/subprocess.html#module-subprocess

1 つの戦略は、stdout/err をファイルにキャプチャしてから、そのファイルを http 応答に書き換えることです。

于 2012-06-17T23:59:58.283 に答える
1

機能する (そしてノンブロッキングで、複数のクライアントにサービスを提供できる) 1 つのアプローチは、Twisted を使用することです。

ProcessProtocol を接続する

http://twistedmatrix.com/documents/current/core/howto/process.html

Twisted WebSocket サーバーへ

https://github.com/tavendo/AutobahnPython

開示:私はアウトバーンの著者です。

于 2012-06-18T08:44:58.663 に答える