如何在Python中打印stderr?

我遇到过至少三种打印到stderr的方法:

 import sys

 print >> sys.stderr, 'spam'

 sys.stderr.write('spamn')

 from __future__ import print_function
 print('spam', file=sys.stderr)

这似乎与Python#13†的禅宗相矛盾,所以最好的方法是什么? 这种方式或其他方式有什么优点或缺点?

†应该有一个 - 而且最好只有一个 - 明显的方法来做到这一点。


我发现这是唯一一个短+灵活+便携+可读的:

from __future__ import print_function
import sys

def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)

eprint功能可以像标准print功能一样使用:

>>> print("Test")
Test
>>> eprint("Test")
Test
>>> eprint("foo", "bar", "baz", sep="---")
foo---bar---baz

sys.stderr.write()是我的选择,只是更具可读性,并且准确地说明您打算在各个版本中进行移植。

编辑:'pythonic'是我在可读性和性能方面的第三个想法......考虑到这两点,使用python 80%的代码将是pythonic。 列表理解是不常用的“大事”(可读性)。


对于Python 2,我的选择是: print >> sys.stderr, 'spam'因为您可以简单地打印列表/字典等,而无需将其转换为字符串。 print >> sys.stderr, {'spam': 'spam'}而不是: sys.stderr.write(str({'spam': 'spam'}))

链接地址: http://www.djcxy.com/p/15299.html

上一篇: How to print to stderr in Python?

下一篇: Get file contents when Connection is keep