在Python2.7中如何将stderr重定向到变量?
我试图将脚本的stderr重定向到一个变量,以便在在Python2.7中如何将stderr重定向到变量?,python,python-2.7,stderr,Python,Python 2.7,Stderr,我试图将脚本的stderr重定向到一个变量,以便在if/else语句中使用它。我需要的是程序按照标准以某种方式运行。 我发现使用StringIO可能适合我的需要,但我不知道如何使它重定向到stderr。我相信这很容易,但我对python还很陌生,非常感谢您提供的任何详细帮助。 谢谢 丹尼 复制sys.stderr 打开一些StringIO变量(可能已经完成) 将变量赋值给sys.stderr 所有对stderr的写入现在都将转到新文件 将保存的sys.stderr原始版本复制回原来的行为 为了拦
if/else
语句中使用它。我需要的是程序按照标准以某种方式运行。
我发现使用StringIO可能适合我的需要,但我不知道如何使它重定向到stderr。我相信这很容易,但我对python还很陌生,非常感谢您提供的任何详细帮助。
谢谢
丹尼
为了拦截对stderr的写入,请使用以下“hack”:
import sys
STDERR = ''
def new_stderr(old):
def new(*args):
# put your code here, you will intercept writes to stderr
print('Intercepted: ' + repr(args))
global STDERR # add new write to STDERR
STDERR += args[0]
old(*args)
return new
sys.stderr.write = new_stderr(sys.stderr.write)
所有对stderr的写入都将存储在stderr变量中使用
sys.stderr
而不是sys.stdout
,然后按照帖子中的说明进行操作。但你为什么需要它。谁在给stderr写信?你不明白链接帖子的哪一部分?在我的例子中,翻译指着最后一行抗议,并给出一条消息:“AttributeError:‘file’object attribute‘write’是只读的”