[Tutor] why "ifconfig" is alway running?
lei yang
yanglei.fage at gmail.com
Sun Dec 19 13:02:51 CET 2010
On Sun, Dec 19, 2010 at 7:56 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
Lei
> 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