WindowsのPython3の標準入出力でバイナリを扱う

Windows上のPython3では、標準入力からバイナリデータを読み込んだり、バイナリデータを標準出力に出力する方法がLinuxとは違っていたので記録しておきます。 ちなみにこのやり方でもLinuxで動きました。

import sys, os

# Read binary from stdin.
buffer_size = 1024*1024*128 # Change the buffer size as you like.
stdin_bytes = b''
while(True):
    read_data = os.read(sys.stdin.fileno(), buffer_size)  
    if len(read_data) == 0:
        break
    stdin_bytes += read_data

# Write binary to stdout.
os.write(sys.stdout.fileno(), stdin_bytes)

余談ですが、パイプって同時に一つしかデータを流せないので、入力データが2個に増えた時にちょっと困りました。普通にファイルでデータを受け渡しする方がエレガントさには欠けますが無難かもしれません。