Я хочу перенаправить файл 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'. Но если это единственное место, где вы это делаете, это не будет проще. (См. [Здесь] (http://pastebin.com/5L9YhnHn).) Если вам нужен контекст общего доступа attr-swapping, это легко ... но вам нужно передать ему пространство имен и имя attr в виде строки , например 'с swapping_attr (sys, 'stdout', sys.stderr):', который, я думаю, не является улучшением. (MacroPy может сделать это красиво, но я бы не использовал MacroPy только для этого ...) – abarnert
Кроме того, общий трюк для этого конкретного случая - использовать 'sys .__ stdout__' вместо stashing' 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. Как перенаправить 'stdout' в 'stderr' и 'stderr' в 'stdout'?
- 2. Как перенаправить stdout stderr в скрипт муравья?
- 3. Как перенаправить stderr в stderr или stdout в Ant?
- 4. Как перенаправить stderr на stdout и наоборот
- 5. Как труба stderr, а не stdout?
- 6. Как перенаправить STDOUT и STDERR на переменную
- 7. Перенаправить STDOUT и STDERR в файл "> &"
- 8. Как перенаправить stderr/stdout в мой журнал C++?
- 9. Не удалось перенаправить stdout или stderr исполняемого файла в windows
- 10. Как перенаправить stdout и stderr в разные файлы в DOS?
- 11. Как перенаправить stderr и stdout в отдельные файлы в Jetty?
- 12. Как перенаправить stderr в stdout в цель Ant JUnit?
- 13. Как перенаправить stderr/stdout вызова Gtk.Window() в python?
- 14. Как отключить $ stdout и $ stderr в Ruby
- 15. Как перенаправить stdout, stderr обратно в/dev/tty
- 16. Как перенаправить stdout и stderr в файл с перенаправлением Unix
- 17. Как перенаправить stderr и stdout в файл для скрипта Ruby?
- 18. Как перенаправить подпроцесс python stderr и stdout в несколько файлов?
- 19. Перенаправить stderr в файл и stdout в C
- 20. Как перенаправить stderr в Python?
- 21. go - перенаправить stderr в файл AND в stdout
- 22. Невозможно перенаправить stderr/stdout в/dev/null в скрипте
- 23. Как перенаправить stdout и stderr и сохранить заказ?
- 24. Как перенаправить stderr и stdout внутри цикла while
- 25. Как перенаправить как stdout, так и stderr в файл И все еще выводить ТОЛЬКО stderr?
- 26. PERL Невозможно перенаправить stdout и stderr в выходной файл
- 27. Перенаправление вывода как stdout, так и stderr?
- 28. Перенаправление bash stdout/stderr в два места?
- 29. Дублирование stdout для stderr
- 30. Объединить несколько stdout/stderr в один stdout
играть с 'sys.stdout',' sys.stderr' и 'sys.stdout'. –