プロセスの標準入力に書き込む

プロセスの標準入力に書き込む

私の知る限り、次のように入力すると...

 python -i

... Pythonインタプリタはstdinから読み込み、次のように動作します。

 >>> print "Hello"
 Hello

これにより、同じことをしたいと思います。

 echo 'print "Hello"' > /proc/$(pidof python)/fd/0

ただし、これは出力です(実際の空行)。

 >>> print "Hello"
 <empyline>

print "Hello"\n私が見るにはただ書くだけでstdout解釈しないようです。なぜ動作しないのですか?動作させるにはどうすればよいですか?

ベストアンサー1

アクセスは、プロセスのファイル記述子 0 にアクセスしません。/proc/PID/fd/0PID、アクセスするファイルPIDファイル記述子0で開きます。これは微妙な違いですが、重要な違いです。ファイル記述子は、プロセスとファイルの間の接続です。ファイル記述子に書き込むと、ファイルが開かれた方法に関係なくファイルに書き込まれます。

通常のファイルの場合、そのファイルに書き込むとファイルが変更されます。データは必ずしもプロセスが次に読み取るデータではありません。プロセスがファイルを読み取るために使用するファイル記述子に接続されている場所によって異なります。プロセスが開かれると、他のプロセスと同じファイルがインポートされますが、ファイルの場所は独立しています。/proc/PID/fd/0/proc/PID/fd/0

パイプの場合、パイプに書き込むと、データがパイプのバッファに追加されます。この場合、パイプから読み取るプロセスはデータを読み込みます。/proc/PID/fd/0

端末の場合は、端末に書き込みます。/proc/PID/fd/0出力端末のデータ。端末ファイルは双方向です。ファイルに書き込むと出力データが生成されます。つまり、端末はテキストを表示します。つまり、端末から入力データを読み出すとユーザ入力が送信される。

Pythonは端末で読み書きできます。を実行すると、端末echo 'print "Hello"' > /proc/$(pidof python)/fd/0に書き込むことになります。print "Hello"端末にprint "Hello"メッセージが表示されます。 Pythonプロセスには何も表示されず、まだ入力を待っています。

Pythonプロセスに入力を提供するには、端末にこれを実行させる必要があります。バラよりクラシックの答えこれを行う方法を学びます。

おすすめ記事