匿名文件对象何时/如何关闭?

2024-04-09

在评论中这个问题 https://stackoverflow.com/questions/38234224/learning-python-the-hard-way-ex-17-i-got-the-one-liner-but?关于Python单行代码,我突然想到我不知道Python如何处理匿名文件对象。从问题来看:

open(to_file, 'w').write(open(from_file).read())

有两个电话open不使用with关键字(这通常是我处理文件的方式)。我过去曾使用过这种未命名的文件。 IIRC,文件上似乎存在剩余的操作系统级锁定,该锁定将在一两分钟后过期。

那么这些文件句柄会发生什么情况呢?它们被垃圾收集清理了吗?通过操作系统?当 Python 机器和文件发生什么情况时close()被调用,当脚本完成并经过一段时间后,这一切都会发生吗?


监视 Linux 上的文件描述符(通过检查 /proc/$$/fds)和 Windows 上的文件句柄(使用 SysInternals 工具),似乎该文件在语句后立即关闭。

然而,这不能保证,因为垃圾收集器必须执行。在我所做的测试中,它每次都会立即关闭。

The with建议与语句一起使用open,但是真正需要它的场合很少。很难演示一个场景,您可以must use with,但为了安全起见,这可能是个好主意。

所以你的一句话就变成了:

with open(to_file, 'w') as tof, open(from_file) as fof:
    tof.write(fof.read())

优点with是特殊方法(在 io 类中)称为__exit__()保证*被调用。

* 除非你做了类似的事情os._exit().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匿名文件对象何时/如何关闭? 的相关文章

随机推荐

  • 收藏的意义何在

    我一直在阅读Effective Java 并且遇到了无界集合类型当我们只能插入null元素 因为它看起来毫无意义 我一直在试图弄清楚这个概念 但它似乎没有多大意义 任何帮助将非常感激 Collection collection Object
  • Sql*plus 总是返回退出代码 0?

    每当我使用 Sql plus 运行 sql 脚本并检查 时 即使脚本不成功 我也会得到 0 Example sqlplus user password instance script sql SQL Plus Release 10 2 0
  • 在今天和昨天之间选择

    我正在尝试在两个日期之间进行选择 如下所示 SELECT p Code p Name sum h PA 1 AS PA sum h PB 1 AS PB sum h PG 1 AS PG sum h GoedkeuringDoorNew G
  • golang - 切片中指针的内容在递归函数运行期间发生变化

    func getAllCertainDivs className string idName string htmlTag HtmlTag matchingDivs HtmlTag fmt Println htmlTag Class if
  • Actionscript 3 的面向方面编程库/框架?

    我正在寻找 Actionscript 3 的全功能 AOP 库 到目前为止我注意到以下项目 但它们似乎都有问题 http farmcode org page Sodality aspx http farmcode org page Soda
  • Elasticsearch 中累积基数聚合的替代解决方案

    我正在运行一个无法访问的 Elasticsearch 集群x packs在 AWS 上 但我仍然想做一个cumulative cardinality aggregation https www elastic co guide en ela
  • ASP.NET Identity - 如何将 dbo.AspNetUsers.Id 更改为非聚集索引?

    我正在使用 ASPNET Identity 2 0 并且需要 添加一个名为 ApplicationUserId int 聚集索引的新字段 将 dbo AspNetUsers Id nvarchar 字段从聚集索引更改为非聚集索引 在我的 M
  • .net Core Quartz 依赖注入

    我如何配置 Quartz net核心使用依赖注入 我使用标准的 net core依赖机制 在实现类的构造函数中IJob 我需要注入一些依赖项 您可以使用Quartz Spi IJobFactory接口并实现它 Quartz 文档指出 当触发
  • SVG QIcon 无法返回在 QToolButton 中使用的放大像素图

    我在图标中使用 SVG 图像QToolButtons 但我需要能够更改工具按钮的大小 并且需要放大或缩小图标 我的 SVG 图标的原始大小为 24 像素 麻烦的是QIcon是它们不会放大到超过原始大小 请参阅我的代码中的 attempts0
  • Shared_ptr 的删除器是否存储在自定义分配器分配的内存中?

    说我有一个shared ptr使用自定义分配器and自定义删除器 我在标准中找不到任何有关删除器应存储在何处的内容 它没有说自定义分配器将用于删除器的内存 也没有说它won t be 这是未指定的还是我只是错过了一些东西 C 11 中的 u
  • C# 的图形查看器/抽屉?

    是否有一个好的 C 库用于绘制 可视化图形 我说的是节点路径可视化而不是折线图等 最好是原生的 而不是 pstricks 的包装或类似的东西 谢谢 一些提示 快速图表 http www codeplex com quickgraph 是一个
  • 隐藏显示的引导程序弹出窗口后需要单击两次

    popoverlink popover popoverhide click function popoverlink popover hide popoverlink position absolute top 100px left 100
  • 使用已弃用的 Hamcrest 方法 is() 的替代方法是什么?

    我现在使用以下代码来断言boolean值 但是方法org hamcrest Matchers is 已弃用 assertThat someValue is false 是否有一种简单的替代语法来测试布尔值而无需求助于assertTrue 这
  • web2py 中的登录后重定向

    我在控制 web2py 中的登录后重定向行为时遇到问题 根据this http groups google com group web2py msg c07acc2f4395f6e4 web2py 以不同的方式处理登录后重定向 具体取决于登
  • WPF 相对源行为

    我的理解有些问题RelativeSource绑定行为 下面是绑定的代码Label内容到StackPanel正确标记
  • 为什么常量 POD 对象中的字段本身不是常量?

    我想为某个 GUID 一个 16 字节结构 专门设计一个模板 GUID 对象具有内部链接 因此我无法使用对象本身的地址 但我认为我可以使用对象的内容 因为该对象是常量 但这不起作用 如以下示例代码所示 struct S int const
  • 如何获取列表框中所选项目的索引?

    我想获取 Google Apps 脚本列表框中所选项目的索引 而不是所选项目本身 到目前为止我看到的所有示例都创建了一个服务器处理程序 通过以下方式获取列表框的值 var list1Value e parameter list1 我想获取索
  • Auth0 回调 URL 不匹配

    我正在 React 应用程序中使用 auth0 进行 LinkedIn 身份验证 我已经设定localhost 3000 upload在设置中的回调网址中 希望用户登录后localhost 3000 login 他们将被重定向到localh
  • docker-compose 使用多个标签构建文件

    我需要为我的应用程序功能创建一些图像 Azure 中的一些协同工作的 Web 应用程序 并且我还想使用多个标签来标记图像 例如最新版本 次要版本 主要版本和完整版本 我在这里阅读了有关扩展的信息https stackoverflow com
  • 匿名文件对象何时/如何关闭?

    在评论中这个问题 https stackoverflow com questions 38234224 learning python the hard way ex 17 i got the one liner but 关于Python单