gpt4 book ai didi

python - os.close(3) 是做什么用的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:33 26 4
gpt4 key购买 nike

os.close(3) 有什么用?

我正在阅读 python cookbook 2nd 第 2.9 章,它解释了 python zip 文件的工作原理。其中有一段代码我真的不明白。

import zipfile, tempfile, os, sys
handle, filename = tempfile.mkstemp('.zip')
os.close(handle) # <- handle is int 3 here
z = zipfile.ZipFile(filename, 'w')
z.writestr('hello.py', 'def f(): return "hello world from "+__file__\n')
z.close()
sys.path.insert(0, filename)
import hello
print hello.f()
os.unlink(filename)

python 文档中的 os.close() 解释:

此函数用于低级 I/O,并且必须应用于由 os.open() 或 pipe() 返回的文件描述符。要关闭由内置函数 open() 或 popen() 或 fdopen() 返回的“文件对象”,请使用其 close() 方法。

linux 中 0,1 & 2 的文件描述符是 stdin、stdout 和 stderror,我不明白 fd 3 的用途是什么?尽管我已经阅读了这个“What is the file descriptor 3 assigned by default?”。

我把 os.close(handle) 注释掉了,但是输出没有什么不同。

最佳答案

尽管 Python 主要处理“文件对象”,但这些是围绕操作系统级文件句柄的抽象;当在操作系统级别实际读取或写入文件(或网络流或其他类似文件的对象)的内容时,将与要与之交互的文件关联的句柄号传递给操作系统。因此,Python 中每个实际由操作系统级文件句柄支持的文件对象都关联了这样一个文件描述符编号。

文件句柄存储在一个表中,每个都与一个整数相关联。在 Linux 上,您可以查看目录 /proc/self/fds(用 PID 号代替 self 以查看不同的进程)以查看哪些句柄具有哪些编号对于给定的过程。

handle, filename = tempfile.mkstemp('.zip'); os.close(handle),从而关闭由 mkstemp 返回给您的操作系统级文件句柄。


顺便说一句:重要的是要注意数字 3 绝对没有什么特别之处,并且在操作系统级别上没有实现相同的默认或常规行为;它恰好是调用 mkstemp 时文件句柄表中的下一个可用位置(或者,更准确地说,当 mkstemp 的 C 标准库实现调用操作系统级系统调用 open)。

关于python - os.close(3) 是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com