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

Sam*_*uel 7 python io python-2.x

我想将其重定向stdout到文件.但这会影响到raw_input.我需要将输出重定向raw_inputstderr而不是stdout.我怎样才能做到这一点?

aba*_*ert 16

唯一的问题raw_input是它将提示输出到stdout.而不是试图拦截它,为什么不自己打印提示,并raw_input在没有提示的情况下调用,这对stdout没有任何打印?

def my_input(prompt=None):
    if prompt:
        sys.stderr.write(str(prompt))
    return raw_input()
Run Code Online (Sandbox Code Playgroud)

如果你想raw_input用这个代替:

import __builtin__
def raw_input(prompt=None):
    if prompt:
        sys.stderr.write(str(prompt))
    return __builtin__.raw_input()
Run Code Online (Sandbox Code Playgroud)

(有关更多信息,请参阅文档__builtin__,存储的模块raw_input和其他内置函数.您通常不需要import它,但文档中没有任何内容可以保证,因此最好是安全...)

在Python 3.2+中,模块被命名builtins而不是__builtin__.(当然3.x raw_input首先没有,它已被重命名input,但可以在那里使用相同的想法.)


fal*_*tru 4

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
Run Code Online (Sandbox Code Playgroud)