00001 import sys
00002 import time
00003 import subprocess
00004 import clnch_misc
00005
00006
00007
00008 class SubProcess:
00009
00010 def __init__( self, cmd, cwd=None, env=None, stdout_writer=None ):
00011
00012 if stdout_writer==None:
00013 stdout_writer = sys.stdout.write
00014
00015 self.cmd = cmd
00016 self.cwd = cwd
00017 self.env = env
00018 self.stdout_writer = stdout_writer
00019 self.p = None
00020
00021 def __call__(self):
00022
00023 class StartupInfo:
00024 pass
00025
00026 STARTF_USESHOWWINDOW = 1
00027 SW_HIDE = 0
00028
00029 startupinfo = StartupInfo()
00030 startupinfo.dwFlags = STARTF_USESHOWWINDOW
00031 startupinfo.wShowWindow = SW_HIDE
00032
00033 self.p = subprocess.Popen( self.cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, cwd=self.cwd, env=self.env, startupinfo=startupinfo )
00034
00035 while 1:
00036 self.stdout_writer( self.p.stdout.read() )
00037 if self.p.poll() != None : break
00038 time.sleep(0.1)
00039
00040 return self.p.returncode
00041
00042 def cancel(self):
00043 clnch_misc.terminateProcess(self.p.pid)
00044
00045