こんにちは。お世話になります。


Pythonで子プロセス(こちらも自作のPython)を起動して、
呼び出し元のプロセスと、子プロセスを連携するプログラムを考えています。

subprocessで子プロセスを起動して、
子プロセスの出力を得る方法は調べれたのですが
子プロセスが
呼び出し元のプロセスからの送信データを
受信する命令が分かりません。

何を言っているかと言いますと
下記URLに書かれている
file_input.pyは
呼び出し元のプロセスから、データを受信しているようですが
file_input.pyのソースコードが掲載されていない為
受信する命令が分かりません。
http://blog.panicblanket.com/archives/690

どのような命令を書いたら
子プロセスは呼び出し元からの送信データを受信できるかを
どなたか教えていただけませんでしょうか。

特にsubprocessに拘っているわけではないので
他の方法があれば、その方法を教えていただけると助かります。

よろしくお願いいたします。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2015/05/30 14:57:51

ベストアンサー

id:a-kuma3 No.1

回答回数4971ベストアンサー獲得回数2153

http://docs.python.jp/2/library/subprocess.html
subprocess.Popen の引数に stdin があるので、そこに POPEN を指定します。

返って来た Popen のインスタンスに対して、stdin に対して write するか、communicate の引数としてデータを渡せば良いみたいです。
呼び出された子プロセスは、sys.stdin から read とかします。

http://stackoverflow.com/questions/18046499/python-subprocess-pipes-stdin-without-using-files

import subprocess
proc = subprocess.Popen('shell command', stdin=subprocess.PIPE)
proc.stdin.write("my data")

http://stackoverflow.com/questions/163542/python-how-do-i-pass-a-string-into-subprocess-popen-using-the-stdin-argument

from subprocess import Popen, PIPE, STDOUT

p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)    
grep_stdout = p.communicate(input=b'one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print(grep_stdout.decode())
id:hibisyugyou

a-kuma3様

sys.stdinのreadで取得できました。
ご回答頂き、ありがとうございました。

2015/05/30 14:57:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません