如何将raw_input重定向到stderr而不是stdout?

时间:2014-01-18 09:39:11

标签: python io python-2.x

我想将stdout重定向到文件。但这会影响raw_input。我需要将raw_input的输出重定向到stderr而不是stdout。我怎么能这样做?

3 个答案:

答案 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。