ホームページ > バックエンド開発 > Python チュートリアル > `subprocess.Popen` による複雑なパイプ処理を回避して、Python で複数のプロセスを効率的に接続するにはどうすればよいですか?

`subprocess.Popen` による複雑なパイプ処理を回避して、Python で複数のプロセスを効率的に接続するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-11 09:24:11
オリジナル
684 人が閲覧しました

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

subprocess.Popen を使用したパイプ経由での複数のプロセスの接続

このシナリオでは、subprocess モジュールを使用してシェル コマンドを実行し、echo、awk の 3 つのコマンドを接続することを目的としています。

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、パイプライン、および複雑なサブプロセス処理の必要性が排除されます。

gt;Python のみの処理の利点

すべての操作を Python 内で実行することで、次のメリットが得られます。いくつかの利点:

  • 中間ステップが不要 (例: awk) により、複雑さと潜在的な問題が追加されます。
  • パイプによって引き起こされる潜在的な同時実行ボトルネックの排除。
  • コードの簡素化により、複数のサブプロセスを処理する必要がなくなります。
  • 単一のプログラミング言語なので、さまざまな言語構造を理解する必要性が減ります。
  • 明確さと保守性の向上

パイプラインの複雑さの回避

シェルでのパイプラインの作成には、複数のフォークとファイル記述子の操作が必要です。 Python では低レベル API を使用して実行できますが、次の方法でパイプラインの作成をシェルに委任する方がはるかに簡単です。

awk_sort = subprocess.Popen( "awk -f script.awk | sort > outfile.txt",
    stdin=subprocess.PIPE, shell=True )
awk_sort.communicate( b"input data\n" )
ログイン後にコピー

このアプローチでは、シェルを仲介者として使用してパイプラインを作成し、Python コードを簡素化します。

以上が`subprocess.Popen` による複雑なパイプ処理を回避して、Python で複数のプロセスを効率的に接続するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート