【发布时间】:2015-01-02 10:30:01
【问题描述】:
基本上我想学习如何使用stdout 的一个subprocess(比如proc1)作为stdin 的2 个或更多其他subprocesses(比如proc2 和proc3)蟒蛇。
嗨,
我需要 zcat 一个 .gz 文件并将发送到 subprocess.PIPE 的输出用于 cksum(unix 实用程序)和行数。
我可以像这样在 bash 中做到这一点......
[hashroot@dev_server 12]$ zcat ABC_C_TPM_26122014.data.gz | tee >(wc -l) >(cksum)| tail -2
2020090579 112180
586
我想在 python 中做同样的事情。
只要我这样做......
>>> import subprocess
>>> import os
>>> fl123 = 'ABC_C_TPM_26122014.data.gz'
>>> pqr123 = subprocess.Popen(['zcat', fl123], stdout=subprocess.PIPE)
>>> subprocess.check_output(['cksum'], stdin=pqr123.stdout)
b'4286000649 256100 \n'
现在PIPE 是空的,所以我将如何获得行数,直到我不再使用zcat。
我可以通过在子进程中运行两次 zcat 并将第一个 zcat 输出重定向到 wc -l 并将第二个 zcat 的输出重定向到 cksum 来很好地做到这一点。但是zcat 是基于磁盘 IO 的,速度很慢。所以我想避免它。
【问题讨论】:
标签: python subprocess named-pipes