我有以下代码:
>>> import io
>>> b = io.BytesIO(b"Hello World")
>>> f = io.TextIOWrapper(b)
>>> f.fileno()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: fileno
但是,当我加载文件时,有一个fileno
属性:
>>> f = open("test.py")
>>> f.fileno()
3
有没有办法为第一种情况创建fileno
属性,我将BytesIO
对象转换为TextIOWrapper
对象?
答案 0 :(得分:1)
好吧,fileno
不可用,因为没有文件。
fileno()
方法返回一个整数,表示操作系统的进程相关文件表中打开文件的位置。如果您没有实际打开文件,操作系统将无法为您提供文件编号。
您的计划的标准输入,输出和错误流(您使用input
阅读并使用print
撰写的那些)编号为0
,1
和{ {1}}。后续打开的文件通常由系统给出序列号。
这不能可靠地伪造:当没有实际文件支持对象时,从2
返回的任何内容都是谎言。这就是实施选择提升fileno()
的原因。除了UnsupportedOperation
之外,没有任何回报是有意义的。
如果你的字符串内容None
绝对必要,你可以这样做:
fileno()
必须有更好的设计,但不会强迫您使用此解决方法。