[Tutor] why "ifconfig" is alway running?

Evert Rol evert.rol at gmail.com
Sun Dec 19 12:56:14 CET 2010


> #!/usr/bin/env python
> import datetime
> import subprocess
> import sys
> import os
> import signal
> from time import sleep
> 
> 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 proc.stdout.readline() #TODO timestamp?
>        print "hello,i'm here"
>        sleep(1)
>    if 0 == proc.poll():
>        print("'%s' is program exited" %cmd)
>    else:
>        try:
>            os.kill(proc.pid, signal.SIGINT)
> 	    print "Process timeout: '%s'" % cmd
>        except OSError:
>            pass
> #cmd="ping 128.114.122.2"
> cmd="ssh root at 10.0.0.1"
> host_run(cmd,10)
> 
> if cmd="ssh root at 10.0.0.1"
> it never print "hello i'm here" , how can i handle this issue, and I
> find my script cant process the "timeout" to kill it.
> if cmd="ping 128.114.122.2", no this issue.

Have you tried running these two commands from the command line?
Spot the difference: ssh is waiting for input (a password. And if passwordless, it may still not produce output to stdout), while ping just continues to produce output.
Then look at the line
    print proc.stdout.readline()
Will that ever read a full line for the ssh command? Probably not, while for ping it will.

So my guess is, your script gets stuck at that line.
But if you ctrl-C to stop the script, you should see where your program gets stuck. You didn't say where it got stuck, that would have helped.

Good luck,

  Evert


> On Sun, Dec 19, 2010 at 4:57 PM, Alan Gauld <alan.gauld at btinternet.com> wrote:
>> 
>> "lei yang" <yanglei.fage at gmail.com> wrote
>> 
>> 
>> def runForAWhile(cmd, secs=10):
>>   print("running %s" % cmd)
>>   timeout = datetime.timedelta(seconds=secs)
>>   print timeout
>>   proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
>> stderr=subprocess.STDOUT, shell=True)
>>   status = proc.poll()
>> 
>> You are still only checking status once outside the while loop.
>> 
>>   start = datetime.datetime.now()
>>   while (status is None and (datetime.datetime.now() - start) <
>> timeout): #not timed out
>>       print proc.stdout.readline() #TODO timestamp?
>>       #print status
>>       #print datetime.datetime.now() - start
>> 
>> 
>>> I see that "status" always "!=0“  why  program  is NOT exited
>> 
>> 
>> --
>> Alan Gauld
>> Author of the Learn to Program web site
>> http://www.alan-g.me.uk/
>> 
>> 
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list