使用 subprocess 模块通过管道连接多个进程时,必须了解这些管道是如何建立的。在本例中,目标是复制 shell 命令:
echo "input data" | awk -f script.awk | sort > outfile.txt
最初,尝试按如下方式完成此任务:
p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=file("outfile.txt", "w")) p_awk.communicate( "input data" )
但是,这种方法仅通过管道数据到 awk 但无法将其输出重定向到排序。为了解决这个问题,我们可以利用 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,使其能够处理进程之间的数据无缝传输。
此外,建议重新考虑 awk 的使用。通过直接在 Python 中实现必要的处理,您可以简化代码并消除因多种编程语言和管道处理复杂性而产生的潜在问题。
以上是如何使用 subprocess.Popen 在 Python 中高效创建多进程管道?的详细内容。更多信息请关注PHP中文网其他相关文章!