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