Would not p.communicate() help in this case?
stdout, stderr = p.communicate()
this way the python could actually request the return message and wait for the process to finish.