Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

BrokenPipeErrorがでたらSIGPIPEを付けるとなんとかなるかも

標準出力に処理結果を出す系のPythonスクリプトを書き、netcatで飛ばそうとしたところ

BrokenPipeError: [Errno 32]

なるエラーが。
要するにパイプの受け渡しに失敗しているのは分かるのですが、じゃあどうすれば……?
答えはPython標準ライブラリのsignalにありました。

実際のところ

# 標準出力のエラー処理を抑制
# ないとBrokenPipeError: [Errno 32]がでる
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)

「標準出力をnetcatにつないで飛ばす」ケースの別の解法

受け手にも細工する必要がありますが……
出力元を問い合わせに応えるWEBサーバとし、受け手側から問い合わせてクエリを処理するという方法が考えられます。
JSONなら、requestsライブラリで受けて処理すると楽かも。
shuzo-kino.hateblo.jp