我想將stdout
重定向到一個文件。但是這會影響raw_input
。我需要將raw_input
的輸出重定向到stderr
而不是stdout
。我該怎麼做如何將raw_input重定向到stderr而不是stdout
回答
暫時重定向stdout
到stderr
然後恢復。
import sys
old_raw_input = raw_input
def raw_input(*args):
old_stdout = sys.stdout
try:
sys.stdout = sys.stderr
return old_raw_input(*args)
finally:
sys.stdout = old_stdout
有沒有簡單的方法來做到這一點。 – Samuel
您可以輕鬆編寫上下文管理器,以便您可以使用swapping_stdout編寫':'。你可以很容易地編寫一個裝飾器,它只是用''with'語句包裝函數。但是,如果這是你做這件事的唯一地方,它不會更簡單。 (見[here](http://pastebin.com/5L9YhnHn)。)如果你想要一個通用的attr-swapping上下文,那很容易......但是你必須把它的名字空間和attr名字作爲一個字符串,像'用swapping_attr(sys,'stdout',sys.stderr):',我不認爲這是一種改進。 (MacroPy可以使它更好,但我不會爲此僅使用MacroPy) – abarnert
此外,這種特定情況下的一個常見技巧是使用'sys .__ stdout__'而不是將'old_stdout'存儲。 – abarnert
raw_input
唯一的問題是它將提示輸出到標準輸出。爲什麼不直接打印提示,而是不要提示輸入raw_input
,這不會給stdout輸出任何內容?
def my_input(prompt=None):
if prompt:
sys.stderr.write(str(prompt))
return raw_input()
如果你想更換raw_input
與此:
import __builtin__
def raw_input(prompt=None):
if prompt:
sys.stderr.write(str(prompt))
return __builtin__.raw_input()
(欲瞭解更多信息,請參閱__builtin__
的文檔,即raw_input
等built-in functions存儲在模塊通常你不要」 t不得不import
它,但沒有任何文件保證,所以最好是安全...)
在Python 3.2+,該模塊被命名爲builtins
而不是的__builtin__
。 (當然3.X沒有raw_input
擺在首位,它已經更名爲input
,但同樣的想法可以在那裏使用。)
+1,Nice'__builtins __。raw_input()'技巧。 – falsetru
'sys.stderr。應該使用write(str(prompt))'來代替['raw_input'](http://docs.python.org/2/library/functions.html#raw_input)。 – falsetru
@falsetru:是的,我認爲你是對的。但是對於你的編輯,['__builtin__'](http://docs.python.org/2/library/__builtin__.html)是正確的名字; '__builtins__'是模塊級對象的CPython特定名稱,可以是'__builtin__'或'__builtin __.__ dict__'。但是,我不確定'__builtins__'是否保證在那裏沒有'import',所以我會補充一點。 – abarnert
使用getpass
import getpass
value=getpass.getpass("Enter Name: ")
print(value)
這將打印內容value
stdout和Enter Name:
stderr。
經過測試並與python 2.7和3.6一起工作。
- 1. 如何將stderr重定向到Ant中的stderr或stdout?
- 2. 將stdout和stderr重定向到函數
- 3. 將子進程stderr重定向到stdout
- 4. Tomcat將'stderr'內容重定向到'stdout'
- 5. 如何在Java中將子進程stdout/stderr重定向到主進程stdout/stderr?
- 6. 如何重定向stdout和stderr流(Multiplatform)?
- 7. 如何將stderr重定向到Ant JUnit目標中的stdout?
- 8. 如何將STDOUT和STDERR重定向到變量
- 9. 如何將stdout和stderr重定向到Python中的記錄器
- 10. 如何將stdout和stderr重定向到文件AND仍只輸出stderr?
- 11. ksh將stdout和stderr重定向到不同的進程
- 12. 如何將RUNTIME ERRORS重定向到STDERR?
- 13. Bash stderr和stdout重定向失敗
- 14. 爲每個線程重定向stdout/stderr
- 15. 實時重定向stdout和stderr
- 16. nohup和sed,重定向stderr和stdout
- 17. 捕捉變量stdout和stderr重定向
- 18. 撤消全局STDERR - > STDOUT重定向
- 19. 重定向stdout和stderr的輸出?
- 20. 重定向stdout/stderr在C中運行
- 21. 在DOSKEY宏中重定向STDERR和STDOUT
- 22. 如果將STDERR重定向到STDOUT並將STDOUT重定向到文件,爲什麼STDERR消息不會在文件中顯示?
- 23. 將stdout/stderr重定向到多個文件
- 24. 將stdout和stderr重定向到單獨的文件和屏幕
- 25. Bash腳本 - 將子腳本stderr重定向到父級的stdout
- 26. 在AIX中將STDERR&STDOUT重定向到/ dev/null失敗
- 27. 將STDOUT的PHP通知和警告重定向到STDERR
- 28. 將stderr和stdout重定向到dev/null的語法
- 29. PERL無法將stdout和stderr重定向到輸出文件
- 30. 將stdout&stderr重定向到系統日誌
玩'sys.stdout','sys.stderr'和'sys.stdout'。 –