3

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.

0

1 Answer 1

4

My answer is taken from here: 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()
Sign up to request clarification or add additional context in comments.

7 Comments

does this work on your end ? I get ValueError: I/O operation on closed file
Yes it does. Maybe the behavior is OS dependant. What OS are you on? I'm on Linux.
Windows 8, i guess this is problem
That works, somewhat, but the child now can't exit from raw_input(), and the whole script strangely exists after 3~4 seconds, and none of the print statements work.
I'm not building a large application here, I was trying to do this in order to better grasp python and it's multiprocessing library. Thank you for your time and advice though !
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.