python子进程Popen可以接受多个stdin流吗?

python子进程Popen可以接受多个stdin流吗?,python,subprocess,stdin,Python,Subprocess,Stdin,我有两个文件需要解析并合并成一个文件。文件的大小非常大,所以我使用管道,所以我没有任何中间文件。我使用的代码是 import subprocess proc1 = subprocess.Popen([ 'parse_script', '-c', '0.5', '-i' path_to_file1 ], stdout=subprocess.PIPE) proc2 = subprocess.Popen([ 'parse_script', '-c', '0.5', '-i' pat

我有两个文件需要解析并合并成一个文件。文件的大小非常大,所以我使用管道,所以我没有任何中间文件。我使用的代码是

import subprocess

proc1 = subprocess.Popen([
    'parse_script', '-c', '0.5', '-i' path_to_file1
], stdout=subprocess.PIPE)

proc2 = subprocess.Popen([
    'parse_script', '-c', '0.5', '-i' path_to_file2
], stdout=subprocess.PIPE)

merge_proc = subprocess.Popen([
    'merge_outputs', '-o', path_to_output_file,
], stdin=(proc1.stdout, proc2.stdout)) # yes, I know this is an error, it's here for demonstrative purposes

merge_proc.communicate()

因此,我有两个进程来解析这两个文件,但是我需要获取这两个进程的stdout,并将它们通过管道传输到合并进程的stdin。上面的代码演示了我要做的事情。所以我的问题是,;如何在文件合并过程中接受多个stdin管道?有什么想法吗?谢谢

不能合并两个子流程.PIPEs,但可以使用自己的管道作为解决方案。像这样:

import subprocess
import os

read_end, write_end = os.pipe()

proc1 = subprocess.Popen(['ls', '/tmp'], stdout=write_end)

proc2 = subprocess.Popen(['ls', '/etc'], stdout=write_end)
os.close(write_end)
merge_proc = subprocess.Popen([
    '/tmp/merge_outputs'], stdin=read_end)

merge_proc.wait()
这将使用
os.pipe()
创建您自己的管道。“源”子进程将其标准输出写入此管道的写入端,合并进程从另一端读取。这是完全支持的


源进程完成后,应关闭管道的写入端。这将允许合并进程在收到所有数据后完成处理

您的parse_脚本输出是否也很大,还是仅源文件?是的,parse_脚本输出将非常大。