首頁 >後端開發 >Python教學 >如何在 Python 中有效連接多個進程,避免使用「subprocess.Popen」進行複雜的管道傳輸?

如何在 Python 中有效連接多個進程,避免使用「subprocess.Popen」進行複雜的管道傳輸?

Barbara Streisand
Barbara Streisand原創
2024-12-11 09:24:11681瀏覽

How Can I Efficiently Connect Multiple Processes in Python, Avoiding Complex Piping with `subprocess.Popen`?

使用subprocess.Popen 透過管道連接多個進程

在這個場景中,您的目標是使用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 和管道

正如已接受的答案中所建議的,與其使用 awk 和管道,不如重寫script.awk 轉換為 Python。這消除了 awk、管道以及複雜的子進程處理的需要。

僅Python 處理的優點

透過在Python 中執行所有操作,您可以獲得幾個優點:

  • 不需要增加複雜性的中間步驟(例如awk)和潛在問題。
  • 消除管道引入的潛在並發瓶頸。
  • 簡化程式碼,無需處理多個子流程。
  • 使用單一程式語言,減少理解不同語言結構的需要。
  • 提高了語言的清晰度和可維護性

避免管道的複雜性

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn