複数のプロセスのパイプ処理を伴う複雑なシェル コマンドを実行するために、Python の subprocess モジュールはプロセスを作成および管理する機能を提供します。この目的で subprocess.Popen を使用する方法を見てみましょう。
提供されたシェル コマンド:
echo "input data" | awk -f script.awk | sort > outfile.txt
echo "input の出力をパイプ処理します。 data" を awk プロセスに送信し、その出力がソート プロセスにパイプされます。 subprocess.Popen を使用してこれをシミュレートするには:
import subprocess p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) p_sort = subprocess.Popen(["sort"], stdin=p_awk.stdout, stdout=subprocess.PIPE) stdout_data = p_sort.communicate(b"input data\n")[0]
このシナリオでは、echo コマンドは p_awk の stdin への直接書き込みに置き換えられ、stdout_data にはソートされた出力が含まれます。
受け入れられたソリューションはパイプの目標を達成していますが、次のことを考慮することをお勧めします。以下に示す Python のみのアプローチ:
import subprocess awk_sort = subprocess.Popen("awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True) stdout_data = awk_sort.communicate(b"input data\n")[0]
このアプローチでは、パイピングをシェルに委任し、サブプロセス コードを簡素化します。さらに、Python で awk スクリプトを書き直すと、依存関係としての awk が排除され、コードがより高速かつ簡単になります。
複数のプロセスをパイプすると、複雑さが生じ、潜在的なボトルネックが生じます。パイプを排除し、すべての処理ステップに Python を使用することで、次の利点が得られます。
以上が`subprocess.Popen` を使用して Python で複数のプロセスを効率的に接続するにはどうすればよいですか?またパイプ処理を避けるべき場合はどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。