Python user input in child process
Question: I'm trying to create a child process that can take input through raw_input()
or input(), but I'm getting an end of liner error _EOFError: EOF_ when asking
for input.

I'm doing this to experiment with multiprocessing in python, and I remember
this easily working in C. Is there a workaround without using pipes or queues
from the main process to it's child ? I'd really like the child to deal with
user input.

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

I wrote some test code that hopefully shows what I'm trying to achieve.


Answer: My answer is taken from here: [Is there any way to pass 'stdin' as an argument
to another process in python?](http://stackoverflow.com/questions/8976962/is-
there-any-way-to-pass-stdin-as-an-argument-to-another-process-in-python)

I have modified your example and it seems to work:

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

