このシナリオでは、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 とパイプを使用する代わりに、 script.awk を Python に変換します。これにより、awk、パイプライン、および複雑なサブプロセス処理の必要性が排除されます。
すべての操作を Python 内で実行することで、次のメリットが得られます。いくつかの利点:
シェルでのパイプラインの作成には、複数のフォークとファイル記述子の操作が必要です。 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 サイトの他の関連記事を参照してください。