From e132ec4f753b9df4769f7e58dfc661617c7375b8 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 7 Jan 2013 01:16:11 -0800 Subject: [PATCH] PipeLogger: handle file object for input_fd --- pym/portage/tests/process/test_PopenProcess.py | 7 ++----- pym/portage/util/_async/PipeLogger.py | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/pym/portage/tests/process/test_PopenProcess.py b/pym/portage/tests/process/test_PopenProcess.py index 5ede164af..88da0b354 100644 --- a/pym/portage/tests/process/test_PopenProcess.py +++ b/pym/portage/tests/process/test_PopenProcess.py @@ -1,4 +1,4 @@ -# Copyright 2012 Gentoo Foundation +# Copyright 2012-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import subprocess @@ -53,12 +53,9 @@ class PopenPipeTestCase(TestCase): try: consumer = PipeLogger(background=True, - input_fd=os.dup(producer.proc.stdout.fileno()), + input_fd=producer.proc.stdout, log_file_path=log_file_path) - # Close the stdout pipe, since we duplicated it, and it - # must be closed in order to avoid a ResourceWarning. - producer.proc.stdout.close() producer.pipe_reader = consumer producer.start() diff --git a/pym/portage/util/_async/PipeLogger.py b/pym/portage/util/_async/PipeLogger.py index 5464879ff..d0b132378 100644 --- a/pym/portage/util/_async/PipeLogger.py +++ b/pym/portage/util/_async/PipeLogger.py @@ -46,10 +46,15 @@ class PipeLogger(AbstractPollTask): else: fcntl_flags |= fcntl.FD_CLOEXEC - fcntl.fcntl(self.input_fd, fcntl.F_SETFL, - fcntl.fcntl(self.input_fd, fcntl.F_GETFL) | fcntl_flags) + if isinstance(self.input_fd, int): + fd = self.input_fd + else: + fd = self.input_fd.fileno() + + fcntl.fcntl(fd, fcntl.F_SETFL, + fcntl.fcntl(fd, fcntl.F_GETFL) | fcntl_flags) - self._reg_id = self.scheduler.io_add_watch(self.input_fd, + self._reg_id = self.scheduler.io_add_watch(fd, self._registered_events, self._output_handler) self._registered = True @@ -133,7 +138,10 @@ class PipeLogger(AbstractPollTask): self._reg_id = None if self.input_fd is not None: - os.close(self.input_fd) + if isinstance(self.input_fd, int): + os.close(self.input_fd) + else: + self.input_fd.close() self.input_fd = None if self.stdout_fd is not None: -- 2.26.2