人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

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

●質問者: hibisyugyou
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

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())

hibisyugyouさんのコメント
a-kuma3様 sys.stdinのreadで取得できました。 ご回答頂き、ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ