2017-07-27 32 views
2

從我所知道的,sys.stdout是一個文件,表示一個終端的標準輸出。然而,當我嘗試使用sys.stdout.seek,無論參數我給它,它拋出一個錯誤:我不能sys.stdout.seek

IOError: [Errno 29] Illegal seek 

這是怎麼回事?是我使用TTY本身而不是像xterm這樣的虛擬終端的事實嗎?我該如何解決這個問題?

+0

哦,你必須使用Python 2. Python 3.6的錯誤如下所示:'io.UnsupportedOperation:基礎流不可搜索。 –

+3

您只能在普通文件中查找。你在尋找TTY時究竟會發生什麼? –

+0

它是類似文件的文件,但實際上不是文件 –

回答

2

當stdout是TTY時,它是一個字符設備,它不可查找,您不能在TTY中使用seek。同爲tell,它沒有實現:

>>> sys.stdout.tell() 
IOError: [Errno 29] Illegal seek 

但是,當您重定向標準流例如文件在shell:

$ my program > ouput.txt 

現在你可以seek從標準輸出,標準輸出現在是一個文件。

請看看這個參考,如果你使用Unix工作:

Understanding character device (or character special) files