subprocess モジュールを使用してパイプ経由で複数のプロセスを接続する場合、これらのパイプがどのように確立されるかを理解することが重要です。この場合の目標は、シェル コマンドを複製することです:
echo "input data" | awk -f script.awk | sort > outfile.txt
当初、次のようにこのタスクを実行する試みが行われました:
p_awk = subprocess.Popen(["awk","-f","script.awk"], stdin=subprocess.PIPE, stdout=file("outfile.txt", "w")) p_awk.communicate( "input data" )
ただし、このアプローチはパイプのみを実行します。データを awk に送信しましたが、その出力をソートにリダイレクトできませんでした。この問題を修正するには、シェルの機能を利用します。
awk_sort = subprocess.Popen( "awk -f script.awk | sort > outfile.txt", stdin=subprocess.PIPE, shell=True ) awk_sort.communicate( b"input data\n" )
この改訂されたアプローチでは、パイプラインの構築をシェルに委任し、シェルがプロセス間のシームレスなデータ転送を処理できるようにします。
さらに、awk の使用を完全に再検討することをお勧めします。必要な処理を Python で直接実装することで、コードを簡素化し、複数のプログラミング言語やパイプライン処理の複雑さから生じる潜在的な問題を排除できます。
以上が「subprocess.Popen」を使用して Python でマルチプロセス パイプラインを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。