1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
from __future__ import print_function
import cmd
from ZeekControl import py3zeek
from ZeekControl.exceptions import CommandSyntaxError, InvalidNodeError, LockError
class ExitValueCmd(cmd.Cmd):
def cmdloop(self, intro=None):
"""Repeatedly issue a prompt, accept input, parse an initial prefix
off the received input, and dispatch to action methods, passing them
the remainder of the line as argument.
"""
self.preloop()
if self.use_rawinput and self.completekey:
try:
import readline
self.old_completer = readline.get_completer()
readline.set_completer(self.complete)
readline.parse_and_bind(self.completekey + ": complete")
except ImportError:
pass
try:
if intro is not None:
self.intro = intro
if self.intro:
self.stdout.write("%s\n" % self.intro)
self._stopping = False
success = True
while not self._stopping:
if self.cmdqueue:
line = self.cmdqueue.pop(0)
else:
if self.use_rawinput:
try:
line = py3zeek.input(self.prompt)
except EOFError:
line = "EOF"
else:
self.stdout.write(self.prompt)
self.stdout.flush()
line = self.stdin.readline()
if not line:
line = "EOF"
else:
line = line.rstrip("\r\n")
line = self.precmd(line)
try:
success = self.onecmd(line)
except (CommandSyntaxError, InvalidNodeError, LockError) as err:
# Note that here we do not attempt to catch all ZeekControl
# exceptions; letting some just terminate the program to
# avoid getting in an unknown state (e.g. error while
# reloading the config).
success = False
print("Error: %s" % err)
self.postcmd(False, line)
self.postloop()
finally:
if self.use_rawinput and self.completekey:
try:
import readline
readline.set_completer(self.old_completer)
except ImportError:
pass
return success
|