STDIN
外部プロセスから 既存のプロセスにデータを書き込む方法を探していますが、同様の質問が見つかりました Python で異なるローカル/リモートプロセスからプログラムの STDIN にデータをストリーミングするにはどうすればよいですか? スタックオーバーで。
そのスレッドで、@Michael は、以下のようなパスで既存のプロセスのファイル記述子を取得でき、Linux でそれらにデータを書き込むことができると言っています。
/proc/$PID/fd/
そこで、外部プロセスからスクリプトのSTDIN
(および) へのデータの書き込みをテストするために、以下にリストされている簡単なスクリプトを作成しました。TTY
#!/usr/bin/env python
import os, sys
def get_ttyname():
for f in sys.stdin, sys.stdout, sys.stderr:
if f.isatty():
return os.ttyname(f.fileno())
return None
if __name__ == "__main__":
print("Try commands below")
print("$ echo 'foobar' > {0}".format(get_ttyname()))
print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))
print("read :: [" + sys.stdin.readline() + "]")
このテスト スクリプトは、 と のパスを表示STDIN
しTTY
、それが と書き込まれるのを待ちSTDIN
ます。
このスクリプトを起動すると、以下のメッセージが表示されました。
Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
それで、コマンドを実行し、echo 'foobar' > /dev/pts/6
他echo 'foobar' > /proc/3308/fd/0
の端末から実行しました。両方のコマンドを実行した後foobar
、テスト スクリプトが実行されている端末にメッセージが 2 回表示されますが、それだけです。行print("read :: [" + sys.stdin.readline() + "]")
は実行されませんでした。
外部プロセスから既存のプロセスSTDIN
(または他のファイル記述子) にデータを書き込む方法、つまり、他のプロセスから行の実行を呼び出す方法はありprint("read :: [" + sys.stdin.readline() + "]")
ますか?