diff --git a/attic/remote.py b/attic/remote.py index f2a0aed06..e60d9f718 100644 --- a/attic/remote.py +++ b/attic/remote.py @@ -30,17 +30,19 @@ def __init__(self, restrict_to_paths): self.restrict_to_paths = restrict_to_paths def serve(self): + stdin_fd = sys.stdin.fileno() + stdout_fd = sys.stdout.fileno() # Make stdin non-blocking - fl = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL) - fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, fl | os.O_NONBLOCK) + fl = fcntl.fcntl(stdin_fd, fcntl.F_GETFL) + fcntl.fcntl(stdin_fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) # Make stdout blocking - fl = fcntl.fcntl(sys.stdout.fileno(), fcntl.F_GETFL) - fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, fl & ~os.O_NONBLOCK) + fl = fcntl.fcntl(stdout_fd, fcntl.F_GETFL) + fcntl.fcntl(stdout_fd, fcntl.F_SETFL, fl & ~os.O_NONBLOCK) unpacker = msgpack.Unpacker(use_list=False) while True: - r, w, es = select.select([sys.stdin], [], [], 10) + r, w, es = select.select([stdin_fd], [], [], 10) if r: - data = os.read(sys.stdin.fileno(), BUFSIZE) + data = os.read(stdin_fd, BUFSIZE) if not data: return unpacker.feed(data) @@ -53,10 +55,9 @@ def serve(self): f = getattr(self.repository, method) res = f(*args) except Exception as e: - sys.stdout.buffer.write(msgpack.packb((1, msgid, e.__class__.__name__, e.args))) + os.write(stdout_fd, msgpack.packb((1, msgid, e.__class__.__name__, e.args))) else: - sys.stdout.buffer.write(msgpack.packb((1, msgid, None, res))) - sys.stdout.flush() + os.write(stdout_fd, msgpack.packb((1, msgid, None, res))) if es: return @@ -312,4 +313,4 @@ def get_many(self, keys): def cache_if_remote(repository): if isinstance(repository, RemoteRepository): return RepositoryCache(repository) - return repository \ No newline at end of file + return repository