为什么close_fds = False有时会在Python 2中挂起进程?

侦察

我注意到在Python3子进程中,Popen参数的默认值close_fds已从更改FalseTrue,我想知道是什么原因,以及几乎始终设置close_fdsTrue(因为我仍在使用Python 2.7)这是一个好习惯

我发现了一个链接,显示与有关的问题close_fds=False

https://bugs.python.org/issue7213

不幸的是,我不清楚为什么会这样。

import subprocess as sub
p1 = sub.Popen(['cat'], stdin=sub.PIPE, stdout=sub.PIPE, close_fds=False)
p2 = sub.Popen(['grep', 'a'], stdin=p1.stdout, stdout=sub.PIPE, close_fds=False)
p1.stdin.write("aaaaaaaaaaaaaaaa\n")
p1.stdin.close()
p2.stdout.read()  # Hangs on Python 2

如果close_fds设置为,程序将在Python2上挂起,而在Python3上不会挂起,也不会挂起True所以我想知道……实际的问题是什么?

编辑:它挂在我的Python 2.6上并停止挂在2.7

阿玛利

那里的实际问题是什么?

在Python 2.6中,p1.stdin管道的写入端的文件句柄由继承p2,它并不关心或知道它,因此将其保持打开状态。因此,尽管父进程确实这样做了p1.stdin.close(),但写管道仍保持打开状态,因此写管道cat不会在其输入上检测到EOF,并一直等待管道中的数据,从而阻塞了整个流程链。

在Python 2.7中,调用和会fcntl(…, F_SETFD, FD_CLOEXEC)跟随创建stdinstdout管道,从而使写入管道末端不会被继承,也不会p2有效地被关闭p1.stdin.close()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的 Ubuntu 20.04 安装有时会在启动时挂起?

来自分类Dev

为什么读取属性有时会在javascript中引发错误?

来自分类Dev

为什么有时会在终端中反复提示“>”?

来自分类Dev

为什么Relation.size有时会在Rails 4中返回哈希

来自分类Dev

为什么后台进程有时会自发停止?

来自分类Java

为什么在Java 8中split有时会在结果数组的开头删除空字符串?

来自分类Dev

为什么 C# 单例类有时会在多线程中调用两个方法?

来自分类Dev

为什么打印char有时会在C中打印4个字节的数字

来自分类Dev

为什么Eclipse CDT代码格式化程序有时会在模板参数中引入空格?

来自分类Dev

Osmnx python graph_to_gdfs有时会在名称列中返回一个列表,这是什么原因造成的?

来自分类Dev

为什么来自子进程的管道有时会中断,有时不会?

来自分类Dev

我如何弄清楚为什么挂起有时会失败?

来自分类Dev

为什么分配Int8Array时Node有时会挂起?

来自分类Dev

为什么在Python中的布尔值上,“ any”有时会比“ max”要快得多,有时却慢得多?

来自分类Dev

为什么Selenium的move_by_offset函数有时会在执行之前等待(Python / Chrome)

来自分类Dev

Alt +箭头有时会旋转屏幕,有时会在浏览器中充当“后退”键

来自分类Java

为什么在Java Servlet中的会话中设置属性有时会失败?

来自分类Dev

为什么 ObjectSpace._id2ref 有时会引发 RangeError?

来自分类Dev

为什么有时会跳过Maven依赖项中的版本号?

来自分类Dev

为什么 Jupyter 有时会将绘图放在可滚动框架中?

来自分类Dev

为什么应用更改有时会修改Microsoft Word 2013中的文本样式?

来自分类Dev

在Visual Studio 2013中,为什么我的断点有时会“分离”?

来自分类Dev

为什么“:”有时会用在 nodejs 的 require 函数中

来自分类Dev

为什么片段中的getContext()有时会返回null?

来自分类Dev

为什么在 javascript 中执行导入时,有时会返回未定义的变量?

来自分类Dev

为什么有时会忽略 flexbox 中的纵横比 CSS 属性?

来自分类Dev

为什么在 Flutter 中实例化小部件时有时会使用 const?

来自分类Dev

为什么农作物有时会在分类栅格上引入NA?

来自分类Dev

为什么PyQt有时会在退出时崩溃?

Related 相关文章

  1. 1

    为什么我的 Ubuntu 20.04 安装有时会在启动时挂起?

  2. 2

    为什么读取属性有时会在javascript中引发错误?

  3. 3

    为什么有时会在终端中反复提示“>”?

  4. 4

    为什么Relation.size有时会在Rails 4中返回哈希

  5. 5

    为什么后台进程有时会自发停止?

  6. 6

    为什么在Java 8中split有时会在结果数组的开头删除空字符串?

  7. 7

    为什么 C# 单例类有时会在多线程中调用两个方法?

  8. 8

    为什么打印char有时会在C中打印4个字节的数字

  9. 9

    为什么Eclipse CDT代码格式化程序有时会在模板参数中引入空格?

  10. 10

    Osmnx python graph_to_gdfs有时会在名称列中返回一个列表,这是什么原因造成的?

  11. 11

    为什么来自子进程的管道有时会中断,有时不会?

  12. 12

    我如何弄清楚为什么挂起有时会失败?

  13. 13

    为什么分配Int8Array时Node有时会挂起?

  14. 14

    为什么在Python中的布尔值上,“ any”有时会比“ max”要快得多,有时却慢得多?

  15. 15

    为什么Selenium的move_by_offset函数有时会在执行之前等待(Python / Chrome)

  16. 16

    Alt +箭头有时会旋转屏幕,有时会在浏览器中充当“后退”键

  17. 17

    为什么在Java Servlet中的会话中设置属性有时会失败?

  18. 18

    为什么 ObjectSpace._id2ref 有时会引发 RangeError?

  19. 19

    为什么有时会跳过Maven依赖项中的版本号?

  20. 20

    为什么 Jupyter 有时会将绘图放在可滚动框架中?

  21. 21

    为什么应用更改有时会修改Microsoft Word 2013中的文本样式?

  22. 22

    在Visual Studio 2013中,为什么我的断点有时会“分离”?

  23. 23

    为什么“:”有时会用在 nodejs 的 require 函数中

  24. 24

    为什么片段中的getContext()有时会返回null?

  25. 25

    为什么在 javascript 中执行导入时,有时会返回未定义的变量?

  26. 26

    为什么有时会忽略 flexbox 中的纵横比 CSS 属性?

  27. 27

    为什么在 Flutter 中实例化小部件时有时会使用 const?

  28. 28

    为什么农作物有时会在分类栅格上引入NA?

  29. 29

    为什么PyQt有时会在退出时崩溃?

热门标签

归档