[Tutor] why "ifconfig" is alway running?
lei yang
yanglei.fage at gmail.com
Sun Dec 19 14:54:30 CET 2010
On Sun, Dec 19, 2010 at 9:05 PM, Sander Sweers <sander.sweers at gmail.com> wrote:
> On 19 December 2010 13:43, lei yang <yanglei.fage at 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
>
More information about the Tutor
mailing list