4

コンソールのSTDIN/STDOUTをすでに実行中のプロセスに接続する方法はありますか?

使用事例:

を使用してコマンドラインで別のPythonスクリプトを実行するPythonスクリプトがありますpopen

実行するために実行するfoo.pyとしましょう。popenpython bar.py

次にbar.py、入力をブロックします。のPIDを取得できますpython bar.py。実行中のPythonインスタンスに新しいコンソールを接続して、インタラクティブに操作できるようにする方法はありますか?pdbの内部で実行したいので、これは特に便利ですbar.py

4

2 に答える 2

4

とんでもない。ただしbar.py、stdinとstdoutを引き継ぐ準備をするために、開始方法を変更できます。

簡単な方法は、名前付きパイプを作成し、Popen呼び出しでこれらをstdin/stdoutとして提供することです。次に、シェル(exec <pipe1 >pipe2)からこれらのパイプに接続して相互作用することができます。これには、プロセスが何をしているかを確認するためにパイプに接続する必要があるという欠点があります。ログファイルを使用してこれを回避することはできますがtee、端末の機能によっては、bar.pyこの種の対話の要求が最大の喜びではない場合があります。

より良い方法は、GNUscreenやtmuxなどのターミナルマルチプレクサプロセスツリーに組み込むことです。これらのツールは、アプリケーションが実行される仮想端末を作成できます。その後、いつでも他の端末をこの端末バッファに接続および切断できます。特定のケースでfoo.pyは、screenまたはtmuxを実行python bar.pyします。これは、完全な(VT100)ターミナルエミュレーションで実行されます。多分これはあなたの問題を解決するでしょう。

于 2012-05-04T19:33:39.110 に答える
0

stdinリダイレクトしたりstdout、プロセスを実行したりすることはできません。ただし、呼び出し元にコードを追加することはできます--- 'sfoo.pyから読み取り、' foo.pysstdinに送信し、その逆も可能です。bar.pystdout

このモデルでは、とをパイプにfoo.py接続し、それらbar.pyのパイプと実際の/の間でデータをシャトルする役割を果たします。stdinstdoutstdinstdout

于 2012-05-04T19:29:43.473 に答える