首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3中的os.execvp()中的文件描述符有什么变化吗?

Python3中的os.execvp()中的文件描述符有什么变化吗?
EN

Stack Overflow用户
提问于 2020-05-14 00:29:39
回答 1查看 130关注 0票数 2

我有一个脚本,它在Python-2下工作得相当好。它使用os.pipe()创建管道,然后将管道写入端的描述符传递给子进程:

代码语言:javascript
复制
    reader, writer = os.pipe()
    pid = os.fork()
    if pid == 0:
        # Child
        os.close(reader)
        os.execvp('command', ['command', '-o', '/dev/fd/%d' % writer])
    ...

在Python-2下,上面的代码可以工作,子进程会写入指定的文件描述符--允许父进程读取它。

在Python-3中,子进程会抱怨无法打开/dev/fd/4 --这意味着,由于某种原因,描述符不会被传递给子进程。原因是什么?是否可以使用旧的、预期的行为调用os.execvp

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 01:10:34

这不是对os.execvp的更改,而是对os.pipe的更改。注意,the Python 3 documentation说“新的文件描述符是non-inheritable",但the Python 2 documentation并非如此。正如该链接中所解释的,要使其在Python3中工作,请执行os.set_inheritable(writer, True)。(顺便说一句,这意味着您的os.close(reader)是冗余的,因为它也是不可继承的,所以您可以删除该行。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61779902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档