On Sun, Dec 19, 2010 at 8:09 PM, Evert Rol <evert....@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 r...@10.0.0.1" >>>> host_run(cmd,10) >>>> >>>> if cmd="ssh r...@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 r...@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 r...@10.0.0.1 > for you? >
[lya...@pek-lpgbuild13 py]$ ssh r...@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.ga...@btinternet.com> >>>> wrote: >>>>> >>>>> "lei yang" <yanglei.f...@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 - tu...@python.org >>>>> To unsubscribe or change subscription options: >>>>> http://mail.python.org/mailman/listinfo/tutor >>>>> >>>> _______________________________________________ >>>> Tutor maillist - tu...@python.org >>>> To unsubscribe or change subscription options: >>>> http://mail.python.org/mailman/listinfo/tutor >>> >>> > > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor