Skip to content

Commit

Permalink
python#2491: os.fdopen() is now almost an alias to the builtin open()…
Browse files Browse the repository at this point in the history
…, and accepts the same parameters.

It just checks that the first argument is a file descriptor.
  • Loading branch information
amauryfa committed Aug 1, 2008
1 parent e19cadb commit bdbddf8
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 11 deletions.
6 changes: 3 additions & 3 deletions Lib/os.py
Original file line number Diff line number Diff line change
Expand Up @@ -651,9 +651,9 @@ def __getattr__(self, name):
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)
12 changes: 4 additions & 8 deletions Lib/test/test_urllibnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,18 +113,14 @@ def test_getcode(self):
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")
Expand Down Expand Up @@ -156,7 +152,7 @@ def test_basic(self):
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")
Expand All @@ -170,7 +166,7 @@ def test_specified_path(self):
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:
Expand Down
4 changes: 4 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit bdbddf8

Please sign in to comment.