377 import Pyro.core as pyro |
380 import Pyro.core as pyro |
378 |
381 |
379 if not os.path.isdir(WorkingDir): |
382 if not os.path.isdir(WorkingDir): |
380 os.mkdir(WorkingDir) |
383 os.mkdir(WorkingDir) |
381 |
384 |
|
385 |
382 def default_evaluator(tocall, *args, **kwargs): |
386 def default_evaluator(tocall, *args, **kwargs): |
383 try: |
387 try: |
384 res=(tocall(*args,**kwargs), None) |
388 res=(tocall(*args,**kwargs), None) |
385 except Exception: |
389 except Exception: |
386 res=(None, sys.exc_info()) |
390 res=(None, sys.exc_info()) |
387 return res |
391 return res |
|
392 |
388 |
393 |
389 class Server(): |
394 class Server(): |
390 def __init__(self, servicename, ip_addr, port, |
395 def __init__(self, servicename, ip_addr, port, |
391 workdir, argv, autostart=False, |
396 workdir, argv, autostart=False, |
392 statuschange=None, evaluator=default_evaluator, |
397 statuschange=None, evaluator=default_evaluator, |
526 |
531 |
527 |
532 |
528 # Exception hooks s |
533 # Exception hooks s |
529 import threading |
534 import threading |
530 import traceback |
535 import traceback |
|
536 |
|
537 |
531 def LogException(*exp): |
538 def LogException(*exp): |
532 if pyroserver.plcobj is not None: |
539 if pyroserver.plcobj is not None: |
533 pyroserver.plcobj.LogMessage(0,'\n'.join(traceback.format_exception(*exp))) |
540 pyroserver.plcobj.LogMessage(0,'\n'.join(traceback.format_exception(*exp))) |
534 else: |
541 else: |
535 traceback.print_exception(*exp) |
542 traceback.print_exception(*exp) |
536 |
543 |
537 sys.excepthook = LogException |
544 sys.excepthook = LogException |
|
545 |
|
546 |
538 def installThreadExcepthook(): |
547 def installThreadExcepthook(): |
539 init_old = threading.Thread.__init__ |
548 init_old = threading.Thread.__init__ |
540 def init(self, *args, **kwargs): |
549 def init(self, *args, **kwargs): |
541 init_old(self, *args, **kwargs) |
550 init_old(self, *args, **kwargs) |
542 run_old = self.run |
551 run_old = self.run |