28

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() + "]")

このテスト スクリプトは、 と のパスを表示STDINTTY、それが と書き込まれるのを待ちSTDINます。

このスクリプトを起動すると、以下のメッセージが表示されました。

Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0

それで、コマンドを実行し、echo 'foobar' > /dev/pts/6echo 'foobar' > /proc/3308/fd/0の端末から実行しました。両方のコマンドを実行した後foobar、テスト スクリプトが実行されている端末にメッセージが 2 回表示されますが、それだけです。行print("read :: [" + sys.stdin.readline() + "]")は実行されませんでした。

外部プロセスから既存のプロセスSTDIN(または他のファイル記述子) にデータを書き込む方法、つまり、他のプロセスから行の実行を呼び出す方法はありprint("read :: [" + sys.stdin.readline() + "]")ますか?

4

2 に答える 2