3

raw_input() または input() を介して入力を受け取ることができる子プロセスを作成しようとしていますが、入力を求めるときにライナーエラーEOFError: EOFの終わりが表示されます。

Python でマルチプロセッシングを実験するためにこれを行っていますが、C で簡単に機能したことを覚えています。メイン プロセスから子プロセスへのパイプまたはキューを使用しない回避策はありますか? 子供にユーザー入力を処理してもらいたいです。

def child():
    print 'test' 
    message = raw_input() #this is where this process fails
    print message

def main():
    p =  Process(target = child)
    p.start()
    p.join()

if __name__ == '__main__':
    main()

うまくいけば、私が達成しようとしていることを示すテストコードをいくつか書きました。

4

1 に答える 1

4

私の答えはここから取られます: Is there any way to pass 'stdin' as an argument to another process in python?

私はあなたの例を修正しましたが、うまくいくようです:

from multiprocessing.process import Process
import sys
import os

def child(newstdin):
    sys.stdin = newstdin
    print 'test' 
    message = raw_input() #this is where this process doesn't fail anymore
    print message

def main():
    newstdin = os.fdopen(os.dup(sys.stdin.fileno()))
    p =  Process(target = child, args=(newstdin,))
    p.start()
    p.join()

if __name__ == '__main__':
    main()
于 2012-12-12T09:11:25.757 に答える