为什么我不能将sys.stdin中的所有数据写入Windows中的文件?

时间:2010-08-16 22:19:30

标签: python windows io binary-data

我试图在Windows XP上使用Python 2.7从sys.stdin读取二进制数据。二进制数据是由foobar2000解码的WAV文件。通常,此数据将发送到命令行编码器,例如stdin上的lame.exe,在此处理它并将其写入输出文件,该文件的名称在命令行参数中提供。我试图拦截输出的WAV数据并将其发送到另一个文件。但是,在管道显然崩溃之前,我只能从stdin获得几KB,因此我只剩下一个非常短(约75 KB)的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 个答案:

答案 0 :(得分:2)

建议:也许您需要msvcrt.setmode(fd, flags)使用fd sys.stdin.fileno()