我的python脚本中有这样一行:
data = sys.stdin.read()
然后我在Windows上使用文件重定向运行脚本:
>> python test.py< binary_file
如果binary_file在Windows中包含\x1a
(ctrl-Z)EOF
,则数据将仅包含\x1a
之前的字符串。我知道可以使用open("...", "rb")
修复常规文件。
我如何处理sys.stdin
?
答案 0 :(得分:3)
我的下一步是尝试fileinput module,但我的直觉是cmd.exe
(或处理管道的代码)真正处理流,查找\0x1a
个字节并发送你是一个EOF。
如果是这样的话,你无能为力;操作系统根本不会让你读过这个字节。没有办法将stdin
“切换”到二进制模式,因为此句柄由运行时或操作系统打开,然后传递给Python。
作为一种解决方法,您可以尝试安装Cygwin或MSys,它会为您提供真正的shell(而不是模仿20世纪80年代创建的错误)。
或尝试PowerShell。如果你很幸运,他们没有在那里重新实现这个bug。