当stdin从文件重定向时,如何读取包含ctrl-Z的文件?

时间:2014-04-11 08:47:00

标签: python windows end-of-life

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

data = sys.stdin.read()

然后我在Windows上使用文件重定向运行脚本:

  

>> python test.py< binary_file

如果binary_file在Windows中包含\x1a(ctrl-Z)EOF,则数据将仅包含\x1a之前的字符串。我知道可以使用open("...", "rb")修复常规文件。

我如何处理sys.stdin

1 个答案:

答案 0 :(得分:3)

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

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

作为一种解决方法,您可以尝试安装CygwinMSys,它会为您提供真正的shell(而不是模仿20世纪80年代创建的错误)。

或尝试PowerShell。如果你很幸运,他们没有在那里重新实现这个bug。