我想将stdout
重定向到文件。但这会影响raw_input
。我需要将raw_input
的输出重定向到stderr
而不是stdout
。我怎么能这样做?
答案 0 :(得分:15)
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存储的模块。您通常不需要import
它,但是文档中没有任何内容可以保证,所以最好是安全的......)
在Python 3.2+中,模块名为builtins
而不是__builtin__
。 (当然3.x首先没有raw_input
,它已被重命名为input
,但可以在那里使用相同的想法。)
答案 1 :(得分:2)
暂时将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
答案 2 :(得分:1)
使用getpass
import getpass
value=getpass.getpass("Enter Name: ")
print(value)
这会将内容value
打印到stdout,将Enter Name:
打印到stderr。
经过测试并使用python 2.7和3.6。