为什么我无法在Windows上将所有数据从sys.stdin写入文件?
我正在尝试在Windows XP上使用Python 2.7从sys.stdin读取二进制数据。这些二进制数据是由foobar2000解码的WAV文件。通常,这些数据会被发送到一个命令行编码器,比如lame.exe,通过stdin进行处理,然后写入一个输出文件,文件名是在命令行参数中提供的。我想要截取输出的WAV数据,并把它发送到另一个文件。然而,我只能从stdin获取几KB的数据,之后管道似乎就崩溃了,所以我得到的只是一个很短的(大约75KB)WAV文件,而不是我期待的几十MB的数据。这可能是什么原因呢?我已经小心地将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
建议:你可能需要使用 msvcrt.setmode(fd, flags)
,其中 fd
是 sys.stdin.fileno()
的结果。