3

我的python脚本中有这样一行:

data = sys.stdin.read()

然后我在 Windows 上运行带有文件重定向的脚本:

>> python test.py < 二进制文件

如果 binary_file 包含Windows 中\x1a的 (ctrl-Z),则EOFdata 将只有字符串 before \x1a。我知道这可以通过open("...", "rb")常规文件修复。

我将如何处理这个sys.stdin

4

1 回答 1

3

我的下一步是尝试fileinput 模块,但我的直觉是cmd.exe(或处理管道的代码)真正处理流,查找\0x1a字节并向您发送 EOF。

如果是这种情况,您将无能为力;操作系统根本不会让你读过去这个字节。无法“切换”stdin到二进制模式,因为此句柄由运行时或操作系统打开,然后传递给 Python。

作为一种解决方法,您可以尝试安装CygwinMSys,它为您提供了一个真正的 shell(而不是模拟 1980 年代创建的错误)。

或尝试PowerShell。如果你幸运的话,他们并没有在其中重新实现这个错误。

于 2014-04-11T09:54:38.000 回答