Почему я не могу записать все данные из sys.stdin в файл в Windows? - PullRequest
3 голосов
/ 17 августа 2010

Я пытаюсь прочитать двоичные данные из 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()

1 Ответ

2 голосов
/ 17 августа 2010

Предложение: возможно, вам нужно использовать msvcrt.setmode(fd, flags), где fd равно sys.stdin.fileno()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...