それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

python の subprocess 起動で、起動コマンドのstdin に書き込む

起動して入力をわたしたい。

cmd1= "cat"
p = subprocess.Popen(cmd1.strip().split(" "), stdin=subprocess.PIPE)
  p.stdin.write("Hello World\n".encode('utf8'))

コマンドを起動するときに、 stdin に PIPEを指定する。実行中の python と サブプロセスのSTDINを繋いでやる。

これで p.write が呼べる

複数パイプしたいとき

複数パイプの起動をしたいときは、こちらのエントリに書きました。

python でコマンド実行。サブプロセスの終了待ち・強制終了・親プロセスと一緒に殺す。 - それマグで!

サンプル

php のソース・コードを実行する例

p1 = Popen(['php'],shell=False,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
p1.stdin.write(b'<?php echo "hello";')
p1.stdin.close()
p1.wait()
ret = p1.stdout.read()
print(str(ret, 'UTF-8'))

例えば、php に ソース・コードを渡して実行させる。rubypython などstdin からソースが取れる言語ならこれで実行できる。