在这个场景中,您的目标是使用 subprocess 模块执行 shell 命令,连接三个命令:echo、awk ,然后排序,并将其输出传输到输出文件。
echo "input data" | awk -f script.awk | sort > outfile.txt
使用 subprocess.Popen,您有:
import subprocess p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=file("outfile.txt", "w")) p_awk.communicate( "input data" )
虽然这个解决方案解决了 awk 的管道排序问题,但它忽略了一个重要的考虑因素:
正如已接受的答案中所建议的,与其使用 awk 和管道,不如重写script.awk 转换为 Python。这消除了 awk、管道以及复杂的子进程处理的需要。
通过在 Python 中执行所有操作,您可以获得几个优点:
在 shell 中创建管道涉及多个分支和文件描述符操作。虽然在 Python 中可以使用低级 API,但通过以下方式将管道创建委托给 shell 要简单得多:
awk_sort = subprocess.Popen( "awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True ) awk_sort.communicate( b"input data\n" )
此方法使用 shell 作为中介来创建管道,从而简化了 Python 代码。
以上是如何在 Python 中有效连接多个进程,避免使用'subprocess.Popen”进行复杂的管道传输?的详细内容。更多信息请关注PHP中文网其他相关文章!