[Tutor] why "ifconfig" is alway running?

lei yang yanglei.fage at gmail.com
Sun Dec 19 13:22:04 CET 2010


On Sun, Dec 19, 2010 at 8:09 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.


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