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