From bdbddf8a82efd0e67f4006af91ce65bec2bf0a60 Mon Sep 17 00:00:00 2001 From: Amaury Forgeot d'Arc Date: Fri, 1 Aug 2008 00:06:49 +0000 Subject: [PATCH] #2491: os.fdopen() is now almost an alias to the builtin open(), and accepts the same parameters. It just checks that the first argument is a file descriptor. --- Lib/os.py | 6 +++--- Lib/test/test_urllibnet.py | 12 ++++-------- Misc/NEWS | 4 ++++ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Lib/os.py b/Lib/os.py index a04aa7f585..2fdf6688a9 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -651,9 +651,9 @@ class _wrap_close: def __iter__(self): return iter(self._stream) -# Supply os.fdopen() (used by subprocess!) -def fdopen(fd, mode="r", buffering=-1): +# Supply os.fdopen() +def fdopen(fd, *args, **kwargs): if not isinstance(fd, int): raise TypeError("invalid fd type (%s, expected integer)" % type(fd)) import io - return io.open(fd, mode, buffering) + return io.open(fd, *args, **kwargs) diff --git a/Lib/test/test_urllibnet.py b/Lib/test/test_urllibnet.py index c8166c4b2d..695541c3ac 100644 --- a/Lib/test/test_urllibnet.py +++ b/Lib/test/test_urllibnet.py @@ -113,18 +113,14 @@ class urlopenNetworkTests(unittest.TestCase): self.assertEqual(code, 404) def test_fileno(self): - if (sys.platform in ('win32',) or - not hasattr(os, 'fdopen')): + if sys.platform in ('win32',): # On Windows, socket handles are not file descriptors; this # test can't pass on Windows. return # Make sure fd returned by fileno is valid. open_url = self.urlopen("http://www.python.org/") fd = open_url.fileno() - # XXX(nnorwitz): There is currently no way to pass errors, encoding, - # etc to fdopen. :-( - FILE = os.fdopen(fd) - FILE._errors = 'ignore' + FILE = os.fdopen(fd, encoding='utf-8') try: self.assert_(FILE.read(), "reading from file created using fd " "returned by fileno failed") @@ -156,7 +152,7 @@ class urlretrieveNetworkTests(unittest.TestCase): file_location,info = self.urlretrieve("http://www.python.org/") self.assert_(os.path.exists(file_location), "file location returned by" " urlretrieve is not a valid path") - FILE = open(file_location, errors='ignore') + FILE = open(file_location, encoding='utf-8') try: self.assert_(FILE.read(), "reading from the file location returned" " by urlretrieve failed") @@ -170,7 +166,7 @@ class urlretrieveNetworkTests(unittest.TestCase): support.TESTFN) self.assertEqual(file_location, support.TESTFN) self.assert_(os.path.exists(file_location)) - FILE = open(file_location, errors='ignore') + FILE = open(file_location, encoding='utf-8') try: self.assert_(FILE.read(), "reading from temporary file failed") finally: diff --git a/Misc/NEWS b/Misc/NEWS index 5f1d90524d..d19984aad3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,10 @@ Core and Builtins Library ------- +- Issue #2491: os.fdopen is now almost an alias for the built-in open(), and + accepts the same parameters. It just checks that its first argument is an + integer. + - Issue #3394: zipfile.writestr sets external attributes when passed a file name rather than a ZipInfo instance, so files are extracted with mode 0600 rather than 000 under Unix. -- 2.40.0