Python 为什么可以';我是否将sys.stdin中的所有数据写入Windows中的文件?

Python 为什么可以';我是否将sys.stdin中的所有数据写入Windows中的文件?,python,windows,io,binary-data,Python,Windows,Io,Binary Data,我试图在Windows XP上使用Python 2.7从sys.stdin读取二进制数据。二进制数据是由foobar2000解码的WAV文件。通常,这些数据被发送到命令行编码器,如stdin上的lame.exe,在那里处理并写入一个输出文件,该文件的名称在命令行参数中提供。我试图截取输出的WAV数据并将其发送到另一个文件。然而,在管道明显崩溃之前,我只能从stdin中获得几KB,因此我只剩下一个非常短(约75 KB)的WAV文件,而不是我所期望的几十兆字节。这可能是什么原因造成的?我一直小心地将

我试图在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()

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

,它工作得很好,但是为什么os.fdopen(sys.stdin.fileno(),'rb',0)不工作呢?@ascent1729:可能是因为它正在将
'b'
(太晚)应用到它从底层文件获取的字节,它以文本模式打开。使用
msvcrt.setmode
将其更改为二进制模式。