summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2013-01-07 01:16:11 -0800
committerZac Medico <zmedico@gentoo.org>2013-01-07 01:16:11 -0800
commite132ec4f753b9df4769f7e58dfc661617c7375b8 (patch)
tree82e4ec5fe3dbbc85cd4130035cb0279b9694fa9c
parent48479b4a3dd62085d1c746b7a807a39b1c6538f3 (diff)
downloadportage-e132ec4f753b9df4769f7e58dfc661617c7375b8.tar.gz
portage-e132ec4f753b9df4769f7e58dfc661617c7375b8.tar.bz2
portage-e132ec4f753b9df4769f7e58dfc661617c7375b8.zip
PipeLogger: handle file object for input_fd
-rw-r--r--pym/portage/tests/process/test_PopenProcess.py7
-rw-r--r--pym/portage/util/_async/PipeLogger.py16
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: