On Sun, Dec 19, 2010 at 9:05 PM, Sander Sweers <sander.swe...@gmail.com> wrote: > 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 >
Thanks very much, that's really what I want Lei > 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