> > Have you tried the subprocess module for this rather than os.system? > You might be able to pipe errors to a file with it. You might be able > to use the traceback module for more verbose error catching too. > Okay, I'm tried this instead of os.system:
def dumpexc(e): import sys,traceback,StringIO f = StringIO.StringIO('') ei = sys.exc_info() traceback.print_exception(ei[0],ei[1],ei[2],file=f) return f.getvalue() def spawn(): # ... setup mydir here.... os.chdir(mydir) prog = os.path.join(mydir,"Application.py") params = [sys.executable,prog] logger.info("Spawing %s",str(params)) fout = file(os.path.join(mydir,'errorlog.txt'),'wb+') try: p = subprocess.Popen(params, bufsize=1, stdout=fout.fileno(), stderr=fout.fileno()) except Exception, e: logger.error(dumpexc(e)) return -1 retcode = p.wait() logger.info("Subprocess exited, return code: %d",retcode) fout.close() return retcode When I call spawn() from a service, this is written into the logfile: 2007-04-05 17:52:53,828 INFO .Spawner Spawing ['C:\\Python25\\lib\\site-packages\\win32\\PythonService.exe', 'T:\\Python\\Projects\\Test\\Application.py'] 2007-04-05 17:52:53,828 ERROR .Spawner Traceback (most recent call last): File "T:\Python\Projects\Test\Processor.py", line 40, in spawn_downloader p = subprocess.Popen(params, bufsize=1, stdout=fout.fileno(), stderr=fout.fileno()) File "C:\Python25\lib\subprocess.py", line 586, in __init__ errread, errwrite) = self._get_handles(stdin, stdout, stderr) File "C:\Python25\lib\subprocess.py", line 681, in _get_handles p2cread = self._make_inheritable(p2cread) File "C:\Python25\lib\subprocess.py", line 722, in _make_inheritable DUPLICATE_SAME_ACCESS) TypeError: an integer is required errorlog.txt is - of course - becomes an empty file. When I call spawn() from an application, it works just fine. Any ideas? Thanks, Laszlo -- http://mail.python.org/mailman/listinfo/python-list