stdout
をファイルにリダイレクトします。しかし、これはraw_input
に影響します。 stdout
の代わりにraw_input
の出力をstderr
にリダイレクトする必要があります。どうすればいいですか?raw_inputを標準出力ではなくstderrにリダイレクトする方法
答えて
リダイレクト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
コンテキストマネージャを簡単に書くことができるので、 'with swapping_stdout:'と書くことができます。そして、 'with'ステートメントで関数を単にラップするデコレータを簡単に書くことができます。しかし、これがあなたがやっている唯一の場所なら、それはもっと簡単ではありません。 ([here](http://pastebin.com/5L9YhnHn)を参照してください。)汎用のattr-swappingコンテキストが必要な場合は簡単ですが、名前空間とattr名を文字列として渡す必要があります'swapping_attr(sys、 'stdout'、sys.stderr):'のように、私は改善がないと思います。 (MacroPyはうまくいくかもしれませんが、これだけのためにMacroPyは使用しません...) – abarnert
また、この特定の場合の一般的なやり方は、 'old_stdout'を隠す代わりに' sys .__ stdout__'を使うことです。 – abarnert
raw_input
の唯一の問題は、プロンプトをstdoutに出力することです。プロンプトを表示せずに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が、それはinput
と改名されています、最初の場所でraw_input
はありませんが、同じ考え方を使用することができます。)
+1、ニース '__builtins __。raw_input()'トリック。 – falsetru
'sys.stderr。代わりに['raw_input'](http://docs.python.org/2/library/functions.html#raw_input)のように動作させるためにwrite(str(prompt))'を使うべきです。 – falsetru
@falsetru:そうですね、あなたはそうだと思います。しかし、あなたの編集のために、['__builtin__'](http://docs.python.org/2/library/__builtin__.html)は正しい名前です。 '__builtins__'は' __builtin__'または '__builtin __.__ dict__'のモジュールレベルオブジェクトのCPython固有の名前です。しかし、私は '__builtins__'が' import'なしでそこにいることが保証されているかどうか分からないので、追加します。 – abarnert
使用getpass
import getpass
value=getpass.getpass("Enter Name: ")
print(value)
を。これは、内容を印刷しますvalue
stdoutにEnter Name:
を追加します。
python 2.7および3.6で動作確認済みです。
- 1. 標準入力と標準出力を.Netでリダイレクトする
- 2. 標準出力と標準エラー出力をUnixリダイレクトを使ってローリングファイルにリダイレクトする方法
- 3. 標準入力と出力をBashでリダイレクトする方法
- 4. 出力を標準エラー出力にリダイレクト
- 5. NSOutputStreamを標準出力にリダイレクトする方法は?
- 6. ctypesで標準出力リダイレクト
- 7. pythonのログ出力を標準出力ではなくファイルにリダイレクトする方法はありますか?
- 8. 標準出力をファイルにリダイレクト+ ANT +コンソールに出力しない
- 9. goder stderrをファイルに転送して標準出力に戻す
- 10. 子プロセスの出力をstderrにリダイレクトする方法は?
- 11. スウィフトで\ 0を標準出力に出力する方法
- 12. 標準出力方法
- 13. inkscapeのエクスポートファイルを標準出力に出力する方法と標準入力から読み取る方法
- 14. タートルの別のコマンドの標準入力にstdout/stderrをパイプする方法は?
- 15. Linux(GCC)で出力する(標準出力ではない)方法は?
- 16. 置換コマンドに標準入力/出力をリダイレクトする
- 17. メソッドの実行時の標準出力と標準エラーのリダイレクト
- 18. Sinatra 1.3ストリーミング(Ruby標準出力リダイレクト)
- 19. 同じファイルにリダイレクトstdoutとstderrと私は2つのファイルに私のCプログラムの標準エラー出力と標準出力の出力をリダイレクトし、元のstdoutとstderrを復元しています
- 20. シェルで実行する標準出力をリダイレクト
- 21. Python - スーパーバイザは標準出力をログに記録する方法 -
- 22. stderrリダイレクト方法
- 23. Ant exec:標準出力をリダイレクトしますが、標準エラーは出力しません
- 24. C#リダイレクト標準入力/エラー
- 25. mpirunはリダイレクトされた標準出力を保持します
- 26. dupとdup2を使って標準出力をパイプにリダイレクトし、パイプを繋ぎ止めしてから標準出力に戻す方法は?
- 27. C++は - コンソール出力を維持しながらファイルに標準出力/標準エラー出力を複製
- 28. ファイルテールインバウンド・チャネル・アダプターを標準エラー出力と標準出力
- 29. bashスクリプトの出力をstderrにリダイレクトするには
- 30. PHPの標準出力データをストリームフィルタリングする方法は?
は 'sys.stdout'、' sys.stderr'と 'sys.stdout'で遊びます。 –