我试图在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()
答案 0 :(得分:2)
建议:也许您需要msvcrt.setmode(fd, flags)
使用fd
sys.stdin.fileno()