[Tutor] why "ifconfig" is alway running?

lei yang yanglei.fage at gmail.com
Sun Dec 19 13:43:42 CET 2010


On Sun, Dec 19, 2010 at 8:29 PM, Evert Rol <evert.rol at gmail.com> wrote:
>>>>>> #!/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.
>>>>>
>>>>
>>>> it's a test, actually, I can't access 10.0.0.1, i just want to kill it
>>>> if *no responding" in 10 second, but it doesn't kill it. I don't know
>>>> why.
>>>> my script is to run a cmd, if more than 10 sec, kill it
>>>> can you show me where is wrong, thanks in advance
>>>
>>> But you never said where the script gets stuck. That would be a very important first step for debugging.
>>>
>>> And if I run this script, I get the following:
>>> "
>>> $> python bla.py
>>> running ssh root at 10.0.0.1
>>> ssh: connect to host 10.0.0.1 port 22: Connection refused
>>>
>>> hello,i'm here
>>> "
>>> So seems to work for me.
>>> thus, what is the result of
>>> $> ssh root at 10.0.0.1
>>> for you?
>>>
>>
>> [lyang0 at pek-lpgbuild13 py]$ ssh root at 10.0.0.1
>> ssh: connect to host 10.0.0.1 port 22: Connection timed out
>>
>> but it will wait for above 30 seconds then print "ssh: connect to host
>> 10.0.0.1 port 22: Connection timed out", but my script is designed to
>> kill it if cmd running more than 10 secs.
>
> So it doesn't produce output for at least 30 secs. Then my guess that it gets stuck at the readline() line still stands.


Right, it gets stuck at the readline(), is there a function not get
stuck to instead of readline().

Lei


> Unfortunately, you still haven't told us where the script gets stuck.
> Also, have you tried to let the script run for, say, 30 seconds at least? Ie, the time it takes for the ssh command to time out by itself.
>
>  Evert
>
>
>>
>>
>> Lei
>>
>>>  Evert
>>>
>>>
>>>>> 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