如何在不全局重新定义sys.stderr的情况下重定向urllib2调试输出?

时间:2014-10-30 17:11:33

标签: python urllib2 python-2.6

urllib2中,当我指定debuglevel参数时,如何重定向特定开启者生成的输出?

E.g。对于这个例子

opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=2))
opener.open("http://stackoverflow.com")

我如何在类似于sys.stderr的“对象”中捕获输出并能够在任何我喜欢的地方写出来?

我有一个使用日志记录和stderr的脚本,此特定输出应该转到日志而不会妨碍任何其他输出。

1 个答案:

答案 0 :(得分:1)

使用print statements that print to sys.stdout生成调试输出。

redirect sys.stdout temporarily for the duration of the urllib2 request很容易,但效果是全局的,即如果有其他Python线程正在运行,那么如果他们将某些内容打印到sys.stdout,他们就会看到更改。

您可能无法覆盖Python 2.6中的print语句。您可以在Python 3中执行此操作,其中print()是一个函数。