簡體   English   中英

當stdin從文件重定向時,如何讀取包含ctrl-Z的文件?

[英]How to read a file containing ctrl-Z when stdin is redirected from a file?

我的python腳本中有這樣一行:

data = sys.stdin.read()

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

>> python test.py <binary_file

如果binary_file包含在Windows中為EOF \\x1a (ctrl-Z),則數據將僅包含\\x1a之前的字符串。 我知道這可以通過open("...", "rb")修復為常規文件。

我如何處理sys.stdin

我的下一步是嘗試fileinput模塊,但我的直覺是cmd.exe (或處理管道的代碼)真正處理流,查找\\0x1a字節\\0x1a送給你一個EOF。

如果是這樣的話,你無能為力; 操作系統根本不會讓你讀過這個字節。 沒有辦法將stdin “切換”到二進制模式,因為此句柄由運行時或操作系統打開,然后傳遞給Python。

作為一種解決方法,您可以嘗試安裝CygwinMSys ,它可以為您提供真正的shell(而不是在20世紀80年代創建的錯誤模擬)。

或者嘗試PowerShell 如果你很幸運,他們沒有在那里重新實現這個bug。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM