一千萬個為什麽

搜索

從stdin讀取二進制數據

是否可以在Python 2.6中將stdin讀取為二進制數據?如果是這樣,怎麽樣?

我在 Python 3.1文檔中看到這很簡單,但設施很簡單在2.6中這樣做似乎並不存在。

如果3.1中描述的方法不可用,有沒有辦法關閉stdin並以二進制模式重新打開?

更新</強>

為了清楚起見,我在MS-DOS shell中使用'type'來將二進制文件的內容傳遞給我的python代碼。據我所知,這應該相當於Unix'cat'命令。但是當我測試它時,我總是比預期的文件大小少一個字節。

更新#2

首先,感謝所有的答案。我正在慢慢努力尋找一個真正可用的解決方案。最後,我仍在嘗試構建一個自包含的JAR文件,該文件執行我的Python代碼,自動傳遞所有未受影響的命令行參數。

我之所以使用Java/JAR/Jython路由,是因為我的一個主外部庫只能作為Java JAR使用。但不幸的是,我的工作開始於Python。不久之前將代碼轉換為Java可能更容易,但由於這些東西都應該兼容,我想我會嘗試通過它來證明它可以完成。

如果有人想知道,這也與我幾天前提出的問題有關。

從Eclipse打包和部署Jython程序

問題中回答了一些問題。

因此,我將嘗試更新我原來的問題,並提供一些關於我到目前為止已經弄清楚的內容。

最佳答案

從文檔(請參閱此處):

標準流處於文本模式   默認。寫或讀二進制   數據到這些,使用底層   二進制緩沖區例如,寫   字節到標準輸出,使用   <�代碼> sys.stdout.buffer.write(b'abc')</代碼>

但是,正如在接受的答案中,使用 -u 調用python是強制stdin,stdout和stderr完全無緩沖的另一種選擇。有關詳細信息,請參閱python(1)聯機幫助頁。

請參閱 io 有關文本緩沖的更多信息,並使用 sys.stdin.detach()禁用Python內的緩沖。

轉載註明原文: 從stdin讀取二進制數據