Python でシェル スクリプトを呼び出そうとしていますが、壊れたパイプ エラーが報告され続けます (結果は問題ありませんが、STDERR でエラー メッセージを表示したくありません)。原因を特定しました。次のスニペットとして再現できます。
subprocess.call('cat /dev/zero | head -c 10 | base64', shell=True)
あああああああああああ==
猫: 書き込みエラー: 壊れたパイプ
/dev/zero
は無限ストリームですが、head -c 10
そこから 10 バイトだけを読み取って終了すると、ピアがパイプを閉じたため、cat は SIGPIPE を取得します。シェルでコマンドを実行しても、壊れたパイプのエラー メッセージは表示されませんが、なぜ python で表示されるのでしょうか?