繁体   English   中英

IPython为什么不调用sys.stderr.flush()?

Why doesn't IPython call sys.stderr.flush()?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用Python logging模块,并通过使用此类的实例覆盖sys.stderrstderr重定向到日志文件...

# Redirect stderr to main_logger using this class
    class CustomWriter:
        def __init__(self, logger, level):
            self.buffer = ''
            self.logger = logger
            self.level = level

        def write(self, message):
            self.buffer += message

        def flush(self):
            if self.buffer != '':
                for line in self.buffer.split('\n'):
                    self.logger.log(self.level, line)
                self.buffer = ''

当我将代码作为脚本运行时,它工作正常,但是当我使用IPython在交互模式下运行相同的代码时,它不记录任何内容,我认为是因为IPython从不调用sys.stdoutflush()方法,如下所示。

import sys
sys.stderr.flush = lambda: print("flushed")
raise Exception("This is a test")

上面的代码作为脚本运行时...

Traceback (most recent call last):
flushed
  File "C:/_MyFiles/Projects/git_projects/fto-util/scratch.py", line 3, in <module>
flushed
    raise Exception("This is a test")
flushed
Exception: This is a test
flushed

Process finished with exit code 1

使用香草Python以交互模式运行时...

>>> import sys
>>> sys.stderr.flush = lambda: print("flushed")
flushed
>>> raise Exception("This is a test")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: This is a test
flushed

使用IPython ...

In [1]: import sys
In [2]: sys.stderr.flush = lambda: print("flushed")
In [3]: raise Exception("This is a test")
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-3-f2b5a8ce26d8> in <module>
----> 1 raise Exception("This is a test")

Exception: This is a test

IPython在这里做一些棘手的事情,还是我对sys.stderr行为做出了无效的假设? 我该如何解决?

问题暂未有回复.您可以查看右边的相关问题.
3 使用fwrite而不调用fflush或先写入stderr

我有一个将二进制数据写入文件或stdout的函数。 但是,对fwrite()的调用有时会失败,除非在尝试进行fwrite之前将fflush(stderr)或将报告打印到stderr 。 这是正常的行为,还是表明存在一些潜在的内存问题? 这是很难调试,因为只要我fprint到stderr ...

5 截断sys.stderr

由于异常处理,如何截断sys.stderr ? 我希望标准错误仅包含字符串"I only want this" ...

8 何时使用sys.stdout而不是sys.stderr?

我的老板告诉我要查看一些旧代码,其中所有内容都发送给stderr。 我知道stderr应该有警告和错误,但他们什么时候应该去stdout呢? 这个程序是一项服务。 它发送给stderr的一些消息是: 所以这个是输出,对吗? 关于成功与否的消息应该转到stdout,因为这不是错 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM