#!/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. Lei 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 - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor