在這個場景中,您的目標是使用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中文網其他相關文章!