On 19 December 2010 13:43, lei yang <yanglei.f...@gmail.com> wrote: > Right, it gets stuck at the readline(), is there a function not get > stuck to instead of readline().
readline() will keep reading stdout until it received a newline character. So if there is nothing to read it will wait forever. The solution is to wait with reading until there is actually something to read. And it is recommended [1] to use proc.communicate() instead of reading directly from stdout. Also you should use proc.terminate() or proc.kill() to stop the command. Below is a modified version of your function to show what I mean. [1] http://docs.python.org/library/subprocess.html#subprocess.Popen.stdin Greets Sander def host_run(cmd, secs=10): print("running %s" % cmd) timeout = datetime.timedelta(seconds=secs) proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) start = datetime.datetime.now() while ( proc.poll() is None and (datetime.datetime.now() - start) < timeout): #not timed out print "hello,i'm here" sleep(1) if 0 == proc.poll(): stdout, stderr = proc.communicate() #get stdout and stderr print("'%s' is program exited" %cmd) print stdout print stderr else: proc.terminate() #Can use proc.kill() as well stdout, stderr = proc.communicate() #get stdout and stderr print 'Timeout: Process terminated' print stdout print stderr _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor