2012-09-25 34 views
3

我有一個Python腳本,需要抑制當您使用鍵盤響應提示時發生的stdin的回顯。當使用鍵盤時,我可以使用VT100控制代碼向上移動一行,清除該行,然後向上移動另一行(以便輸出清除新刪除的行)。如何檢查raw_input()是否來自Python中的鍵盤

但是,此代碼攪亂輸出並最終清除線有效輸出時的輸入來自文件(即cat test | myscript.py,因爲標準輸入顯然並未迴響在這種情況下,任何東西到標準輸出。

我無法控制如何輸入發送到腳本,我不知道用戶是否會使用鍵盤或文件。

有沒有什麼辦法可以檢查raw_input()的輸出如果輸入來自鍵盤,運行VT100控制代碼?

回答

7

你想要的功能是atty(「是TTY」)在文件句柄上。您可以根據需要在sys.stdin,sys.stdout或sys.stderr上測試它。

>>> import sys 
>>> sys.stdin.isatty() 
True 

順便說一句,這就是Python是做得太多,以檢測是否顯示交互式提示(只是嘗試貓|蟒蛇)

+0

是的,這工作完美。謝謝! – javanix

+0

出於好奇,有沒有什麼方法可以「腳本化」TTY輸入,可能會在我的腳本中插入一個扳手? – javanix

+0

是的,但它不能通過管道工作。參見pty模塊。如果您的目的是完全禁用回聲,請按照Ignacio的說法(在測試isatty之後);無論如何,這是shell和編輯使用的。 –

相關問題