Я пытаюсь прочитать двоичные данные из sys.stdin, используя Python 2.7 в Windows XP. Двоичные данные - это файл WAV, декодированный с помощью foobar2000. Обычно эти данные отправляются в кодировщик командной строки, такой как lame.exe на stdin, где они обрабатываются и записываются в выходной файл, имя которого указывается в аргументах командной строки. Я пытаюсь перехватить выводимые данные WAV и отправить их в другой файл. Однако я могу получить только несколько КБ от stdin до того, как конвейер явно рухнет, и поэтому у меня остается только очень короткий (около 75 КБ) файл WAV вместо нескольких десятков мегабайт, которые я ожидаю. Что может быть причиной этого? Я был осторожен, чтобы открыть как sys.stdin, так и выходной файл в виде двоичных файлов.
from __future__ import print_function
import os
import os.path
import sys
sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', 0) # Make sys.stdin binary
wave_fname = os.path.join(os.environ['USERPROFILE'], 'Desktop',
'foobar_test.wav')
try:
os.remove(wave_fname)
except Exception:
pass
CHUNKSIZE = 8192
wave_f = open(wave_fname, 'wb')
try:
bytes_read = sys.stdin.read(CHUNKSIZE)
while bytes_read:
for b in bytes_read:
wave_f.write(b)
bytes_read = sys.stdin.read(CHUNKSIZE)
finally:
pass
wave_f.close()