From 2a7adb029cbee5273321caf29ad26438d6af6b9d Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 5 Dec 2013 22:49:13 -0500 Subject: [PATCH 1/3] Add an optional parameter to start(): quiet_on_read_error Prevent to pollute the parent process output when the port has been closed by the erlang process. --- ernie/ernie.py | 52 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/ernie/ernie.py b/ernie/ernie.py index eacbad0..c784019 100644 --- a/ernie/ernie.py +++ b/ernie/ernie.py @@ -63,7 +63,7 @@ def write_berp(self, output, obj): output.write(data) output.flush() - def start(self): + def start(self, quiet_on_read_err=False): Ernie.log("Starting") # On windows nouse_stdio is ignored by Erlang at the port creation, # so we cannot use file descriptor 3 and 4 for communication. @@ -75,7 +75,10 @@ def start(self): while(True): ipy = self.read_berp(input) if ipy == None: - print 'Could not read BERP length header. Ernie server may have gone away. Exiting now.' + if not quiet_on_read_err: + print ('Could not read BERP length header. ' + 'Ernie server may have gone away. ' + 'Exiting now.') exit() if len(ipy) == 4 and ipy[0] == bert.Atom('call'): @@ -85,15 +88,36 @@ def start(self): res = self.dispatch(mod, fun, args) opy = (bert.Atom('reply'), res) self.log("<- " + opy.__str__()) - self.write_berp(output, opy) + try: + self.write_berp(output, opy) + except IOError as e: + if quiet_on_read_err: + # quiet on read error + exit() + else: + raise e except ServerError, e: opy = (bert.Atom('error'), (bert.Atom('server'), 0, str(type(e)), str(e), '')) self.log("<- " + opy.__str__()) - self.write_berp(output, opy) + try: + self.write_berp(output, opy) + except IOError as e: + if quiet_on_read_err: + # quiet on read error + exit() + else: + raise e except Exception, e: opy = (bert.Atom('error'), (bert.Atom('user'), 0, str(type(e)), str(e), '')) self.log("<- " + opy.__str__()) - self.write_berp(output, opy) + try: + self.write_berp(output, opy) + except IOError as e: + if quiet_on_read_err: + # quiet on read error + exit() + else: + raise e elif len(ipy) == 4 and ipy[0] == bert.Atom('cast'): mod, fun, args = ipy[1:4] self.log("-> " + ipy.__str__()) @@ -101,12 +125,26 @@ def start(self): res = self.dispatch(mod, fun, args) except: pass - self.write_berp(output, (bert.Atom('noreply'))) + try: + self.write_berp(output, (bert.Atom('noreply'))) + except IOError as e: + if quiet_on_read_err: + # quiet on read error + exit() + else: + raise e else: self.log("-> " + ipy.__str__()) opy = (bert.Atom('error'), (bert.Atom('server'), 0, "Invalid request: " + ipy.__str__())) self.log("<- " + opy.__str__()) - self.write_berp(output, opy) + try: + self.write_berp(output, opy) + except IOError as e: + if quiet_on_read_err: + # quiet on read error + exit() + else: + raise e class ServerError(Exception): def __init__(self, value): From 4cb019be2e9b5af75c2e9be604f4532bf5e3f59a Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 5 Dec 2013 22:59:35 -0500 Subject: [PATCH 2/3] Remove unnecessary comments --- ernie/ernie.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ernie/ernie.py b/ernie/ernie.py index c784019..4d85987 100644 --- a/ernie/ernie.py +++ b/ernie/ernie.py @@ -92,7 +92,6 @@ def start(self, quiet_on_read_err=False): self.write_berp(output, opy) except IOError as e: if quiet_on_read_err: - # quiet on read error exit() else: raise e @@ -103,7 +102,6 @@ def start(self, quiet_on_read_err=False): self.write_berp(output, opy) except IOError as e: if quiet_on_read_err: - # quiet on read error exit() else: raise e @@ -114,7 +112,6 @@ def start(self, quiet_on_read_err=False): self.write_berp(output, opy) except IOError as e: if quiet_on_read_err: - # quiet on read error exit() else: raise e @@ -129,7 +126,6 @@ def start(self, quiet_on_read_err=False): self.write_berp(output, (bert.Atom('noreply'))) except IOError as e: if quiet_on_read_err: - # quiet on read error exit() else: raise e @@ -141,7 +137,6 @@ def start(self, quiet_on_read_err=False): self.write_berp(output, opy) except IOError as e: if quiet_on_read_err: - # quiet on read error exit() else: raise e From 847ba80e0593fbe2b87cc333a325d4170a3f5d11 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 6 Dec 2013 08:18:42 -0500 Subject: [PATCH 3/3] Rename quiet_on_read_err to quiet_on_io_err Since this variable is used for both read and write errors. --- ernie/ernie.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ernie/ernie.py b/ernie/ernie.py index 4d85987..3c962a1 100644 --- a/ernie/ernie.py +++ b/ernie/ernie.py @@ -63,7 +63,7 @@ def write_berp(self, output, obj): output.write(data) output.flush() - def start(self, quiet_on_read_err=False): + def start(self, quiet_on_io_err=False): Ernie.log("Starting") # On windows nouse_stdio is ignored by Erlang at the port creation, # so we cannot use file descriptor 3 and 4 for communication. @@ -75,7 +75,7 @@ def start(self, quiet_on_read_err=False): while(True): ipy = self.read_berp(input) if ipy == None: - if not quiet_on_read_err: + if not quiet_on_io_err: print ('Could not read BERP length header. ' 'Ernie server may have gone away. ' 'Exiting now.') @@ -91,7 +91,7 @@ def start(self, quiet_on_read_err=False): try: self.write_berp(output, opy) except IOError as e: - if quiet_on_read_err: + if quiet_on_io_err: exit() else: raise e @@ -101,7 +101,7 @@ def start(self, quiet_on_read_err=False): try: self.write_berp(output, opy) except IOError as e: - if quiet_on_read_err: + if quiet_on_io_err: exit() else: raise e @@ -111,7 +111,7 @@ def start(self, quiet_on_read_err=False): try: self.write_berp(output, opy) except IOError as e: - if quiet_on_read_err: + if quiet_on_io_err: exit() else: raise e @@ -125,7 +125,7 @@ def start(self, quiet_on_read_err=False): try: self.write_berp(output, (bert.Atom('noreply'))) except IOError as e: - if quiet_on_read_err: + if quiet_on_io_err: exit() else: raise e @@ -136,7 +136,7 @@ def start(self, quiet_on_read_err=False): try: self.write_berp(output, opy) except IOError as e: - if quiet_on_read_err: + if quiet_on_io_err: exit() else: raise e