[issue24073] sys.stdin.mode can not give the right mode and os.fdopen does not check argument

2015-04-29 Thread Ned Deily

Ned Deily added the comment:

I think the issue here is that you are expecting the mode attribute of a file 
object (or io.* object in Py3) to reflect the readable and writeable access 
mode of the underlying file descriptor (for POSIX-like systems).  But, as noted 
in the documentation for the Py3 io.* objects and Py2 file object, their mode 
attributes reflect the mode given in the object constructor (for io.*) or the 
open() built-in (for Py2).  The default sys.stdin object will always be created 
as a readable file/io object from Python's perspective but that doesn't mean 
that any file descriptor to which the object might refer actually allows read 
access.  That may not be determined until your program does something that 
causes a call to the system runtime libraries that requires read access to 
the file, for example, sys.stdin.read() or, for Py2, 
os.fdopen(sys.stdin.fileno()).  (As documented, the Py3 os.fdopen is an alias 
of the open() built-in.)  If you need to know the access mode of a particular fi
 le descriptor, you can use fcntl.fcntl() F_GETFL function to examine the 
access mode of the fd.  Or you could just use try/except blocks to catch 
exceptions.

https://docs.python.org/3/library/os.html#os.open
https://docs.python.org/3/library/io.html#io.FileIO
https://docs.python.org/2/library/stdtypes.html#file.mode
https://docs.python.org/3/library/fcntl.html#fcntl.fcntl
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html

--
nosy: +ned.deily
resolution:  - not a bug
stage:  - resolved
status: open - closed

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24073
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24073] sys.stdin.mode can not give the right mode and os.fdopen does not check argument

2015-04-29 Thread Xiang Zhang

Xiang Zhang added the comment:

Thanks for your reply Ned and it does solve my puzzle. It's my fault to 
misunderstand the attribute and make noise here.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24073
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24073] sys.stdin.mode can not give the right mode and os.fdopen does not check argument

2015-04-28 Thread Xiang Zhang

New submission from Xiang Zhang:

The problem is what the title tells and can be produced by the snippet below.

import sys
import os

sys.stdout.write(%s\n % sys.stdin.mode)
sys.stdout.flush()
f = os.fdopen(sys.stdin.fileno(), r)
f.write()
f.flush()
f.read()
f.close()

When running this snippet with nohup, which changes the stdin's mode to 
O_WRONLY(which can also be shown below because the write operation will fail), 
this snippet will still give sys.stdin.mode as r, both in 2.7 and 3.4.

In 2.7, the os.fdopen will fail with Invalid Argument error because the mode r 
given to fdopen conflicts with stdin's real mode w. In 3.4, os.fdopen won't 
give any error.

Both in 2.7 and 3.4, if I change the mode given to os.fdopen to w:
f = os.fdopen(sys.stdin.fileno(), w)
The write operation will succeed and the read operation will fail.

The output produced in nohup.out for 2.7 is:
r
Traceback (most recent call last):
  File test.py, line 9, in module
f.read()
IOError: File not open for reading
For 3.4:
r
Traceback (most recent call last):
  File test.py, line 9, in module
f.read()
io.UnsupportedOperation: not readable

I run the snippet with nohup on Gnome Terminal, bash, Ubuntu 15.04. The Python 
version is 2.7.9 and 3.4.3.

--
components: Library (Lib)
messages: 242211
nosy: angwer
priority: normal
severity: normal
status: open
title: sys.stdin.mode can not give the right mode and os.fdopen does not check 
argument
type: behavior
versions: Python 2.7, Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24073
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com