Python3中os.execvp()中的文件描述符有任何更改吗?

Python3中os.execvp()中的文件描述符有任何更改吗?,python,python-3.x,pipe,exec,file-descriptor,Python,Python 3.x,Pipe,Exec,File Descriptor,我有一个脚本,它在Python-2下运行得相当好。它使用os.pipe()创建管道,然后将管道写入端的描述符传递给子进程: reader,writer=os.pipe() pid=os.fork() 如果pid==0: #孩子 操作系统关闭(读卡器) execvp('command',['command','-o','/dev/fd/%d'%writer')) ... 在Python-2下,上面的操作有效,并且子级写入指定的文件描述符——允许父级读取它 在Python-3下,孩子们抱怨无法打开

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

reader,writer=os.pipe()
pid=os.fork()
如果pid==0:
#孩子
操作系统关闭(读卡器)
execvp('command',['command','-o','/dev/fd/%d'%writer'))
...
在Python-2下,上面的操作有效,并且子级写入指定的文件描述符——允许父级读取它


在Python-3下,孩子们抱怨无法打开
/dev/fd/4
——这意味着由于某种原因,描述符没有传递给孩子们。这是什么原因?有可能用旧的、预期的行为调用
os.execvp
吗?

这不是对
os.execvp
的更改,而是对
os.pipe
的更改。请注意,上面说“新文件描述符是”,但不是。如该链接中所述,要使其在Python3中工作,请执行
os.set\u可继承(writer,True)
。(顺便说一句,这意味着你的
os.close(reader)
是多余的,因为它也不可继承,所以你可以删除该行。)

太棒了,谢谢。我将关闭os.close(reader),以便Python-2仍能正常工作。