Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python2.7中如何将stderr重定向到变量?_Python_Python 2.7_Stderr - Fatal编程技术网

在Python2.7中如何将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原始版本复制回原来的行为 为了拦

我试图将脚本的stderr重定向到一个变量,以便在
if/else
语句中使用它。我需要的是程序按照标准以某种方式运行。 我发现使用StringIO可能适合我的需要,但我不知道如何使它重定向到stderr。我相信这很容易,但我对python还很陌生,非常感谢您提供的任何详细帮助。 谢谢

丹尼

  • 复制sys.stderr
  • 打开一些StringIO变量(可能已经完成)
  • 将变量赋值给sys.stderr
  • 所有对stderr的写入现在都将转到新文件
  • 将保存的sys.stderr原始版本复制回原来的行为

  • 为了拦截对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’是只读的”