Python 如何使用std[in/out/err]以外的文件描述符?

Python 如何使用std[in/out/err]以外的文件描述符?,python,python-3.x,python-3.4,file-descriptor,Python,Python 3.x,Python 3.4,File Descriptor,我需要通过管道将两个数据流从Python(3.4)脚本传输到外部程序。你可以去STDIN,我没问题: from subprocess import check_output data1 = b'This is the data to pass on stdin' check_output(['externalprogram'], input=data1) 程序可以接受命令行中给定的文件描述符上的另一部分,但是如何告诉python在另一个fd上发送数据呢 data2 = b'This is t

我需要通过管道将两个数据流从Python(3.4)脚本传输到外部程序。你可以去STDIN,我没问题:

from subprocess import check_output

data1 = b'This is the data to pass on stdin'
check_output(['externalprogram'], input=data1)
程序可以接受命令行中给定的文件描述符上的另一部分,但是如何告诉python在另一个fd上发送数据呢

data2 = b'This is the data to pass on fd 3'
check_output(['externalprogram', '-data2fd', '3'], input=data1, ???)

我想我可能需要更深一层,使用
Popen
,但我仍然不知道如何做。

至少在linux上,您可以使用
os.pipe
创建管道。调用子管道时,它将继承父管道。父级应关闭读取端以避免伪信号,然后写入管道的写入端。然后,孩子可以从管道的读取端进行读取。

这是一个正确方向上的有用提示,但我仍然无法让它工作。。。不断出现管道破裂异常。你能提供一个简短的示例片段吗?没关系,我想我刚刚找到了答案+1用于向正确方向推动。。。如果你想充实它,那就去吧;否则,一旦得到完整的解决方案,我可能会自己发布第二个答案并提供更多信息。
close\u fds=True
默认情况下,在Python 3的POSIX上。此处需要
pass\u fds
参数。使用
pass\u fds
参数,投票关闭,作为和的某些组合的副本。如果它是一个组合,则它不是副本。您是否考虑过将
0
(stdin)作为
-data2fd
参数()传递?你可以.@J.F.Sebastian嗯,第一个链接的Q几乎就是我要问的。只是第二个链接的答案更直接地回答了Python3的问题。第一个链接在Python3上不起作用((a)默认情况下不同于
close\u fds
(b)