interactive client: improve keyboard interrupt
- when driving a module with <module>(<target>), keyboard interrupt should send stop() - make sure keyboard interrupt does not only stop the current driving, but also skips other code on the same command line Change-Id: Ib4d2c4111dc0f23bf07385065766fb9b4a611454 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31926 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
7a2e764262
commit
923da8ca15
@ -214,18 +214,28 @@ class Module:
|
||||
return self.read()
|
||||
self.target = target # this sets self._is_driving
|
||||
type(self).value.prev = None # show at least one value
|
||||
try:
|
||||
|
||||
def loop():
|
||||
while self._is_driving:
|
||||
self._driving_event.wait()
|
||||
self._watch_parameter(self._name, 'value', mininterval=self._secnode.mininterval)
|
||||
self._watch_parameter(self._name, 'status')
|
||||
self._driving_event.clear()
|
||||
except KeyboardInterrupt:
|
||||
self.stop()
|
||||
try:
|
||||
loop()
|
||||
except KeyboardInterrupt as e:
|
||||
self._secnode.log.info('-- interrupted --')
|
||||
self._watch_parameter(self._name, 'status')
|
||||
self._secnode.readParameter(self._name, 'value')
|
||||
self._watch_parameter(self._name, 'value', forced=True)
|
||||
self.stop()
|
||||
try:
|
||||
loop() # wait for stopping to be finished
|
||||
except KeyboardInterrupt:
|
||||
# interrupted again while stopping -> definitely quit
|
||||
pass
|
||||
clientenv.raise_with_short_traceback(e)
|
||||
finally:
|
||||
self._watch_parameter(self._name, 'status')
|
||||
self._secnode.readParameter(self._name, 'value')
|
||||
self._watch_parameter(self._name, 'value', forced=True)
|
||||
return self.value
|
||||
|
||||
def __repr__(self):
|
||||
@ -331,8 +341,8 @@ def watch(*args, **kwds):
|
||||
for mobj in modules:
|
||||
mobj._start_watching()
|
||||
time.sleep(3600)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except KeyboardInterrupt as e:
|
||||
clientenv.raise_with_short_traceback(e)
|
||||
finally:
|
||||
for mobj in modules:
|
||||
mobj._stop_watching()
|
||||
|
Loading…
x
Reference in New Issue
Block a user