#!/usr/bin/env python import datetime import subprocess import sys import os import signal from time import sleep
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() 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 if 0 == status: 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.224.165.20 -c 4" runForAWhile(cmd,30) I see that "status" always "!=0“ why program is NOT exited Lei On Sun, Dec 19, 2010 at 1:15 AM, Alan Gauld <alan.ga...@btinternet.com> wrote: > > "lei yang" <yanglei.f...@gmail.com> wrote > >> def runForAWhile(cmd, secs=10): >> proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, >> >> stderr=subprocess.STDOUT, shell=True) >> status = proc.poll() >> start = datetime.datetime.now() >> while (status is None and > > (datetime.datetime.now() - start) < timeout): #not timed out >> >> print status >> if 0 == status: >> print("'%s' is program exited" %cmd) >> else: >> try: >> os.kill(proc.pid, signal.SIGINT) > >> why it print many "None" in 10 second. which means "ifconfig" is >> running in 10sec, why, what's wrong withi my script, > > You only check the status once *before* entering the while loop. > You need another status check inside the loop. > >> I just want to let my programe running, if it's timeout(10sec), kill it > > Its not clear from your mail if you have checked whether the > process really is running - using the OS commands 'top' or 'ps' > for example or whjether its just the None result you are concerned > about. But try updating status first... > > HTH, > > > -- > 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 - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor