I find the documentation on Popen.communicate() somewhat incomplete. Take the example from the documentation, with a slight modification:
p = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
try :                                                                       
    outs, errs = p.communicate(ins, timeout=5)                             
except TimeoutExpired:                                                      
    p.kill()                                                
    outs, errs = p.communicate(ins) # What's with the input data?                                         
# What value does p.returncode have at this point?
Then I have two questions:
- If I send input insto the child process, do I resend the input after catching the timeout exception? Does this handle already read input correctly?
- What will be the value (if any) of p.returncodeafter callingp.kill(), i.e. after sending aSIGKILLto the process?
 
     
    