问题的答案是:在 python 中打印 stderr 有不同的方法,但这取决于
1.) 我们使用的是哪个 python 版本
2.) 我们想要什么确切的输出。
print和stderr的write函数的区别:
stderr :stderr(标准错误)是每个 UNIX/Linux 系统中内置的管道,当您的程序崩溃并打印出调试信息(如 Python 中的回溯)时,它会进入 stderr 管道。
print:print 是一个包装器,用于格式化输入(输入是参数和末尾的换行符之间的空格),然后它调用给定对象的 write 函数,给定对象默认情况下是 sys.stdout,但我们可以传递一个文件,即我们也可以在文件中打印输入。
Python2:
如果我们使用的是python2,那么
>>> import sys
>>> print "hi"
hi
>>> print("hi")
hi
>>> print >> sys.stderr.write("hi")
hi
Python2 的尾随逗号在 Python3 中已成为参数,所以如果我们使用
尾随逗号以避免打印后的换行符,这将在
Python3 看起来像 print('Text to print', end=' ') 这是一种语法
Python2下报错。
http://python3porting.com/noconv.html
如果我们在 python3 中检查上述相同的情况:
>>> import sys
>>> print("hi")
hi
在 Python 2.6 下,有一个 future 导入可以将 print 转换为
功能。因此,为了避免任何语法错误和其他差异,我们
应该从 future 导入任何我们使用 print() 的文件开始
打印函数。 future 导入仅适用于 Python 2.6 和
稍后,因此对于 Python 2.5 及更早版本,您有两个选择。你可以
将更复杂的打印转换为更简单的打印,或者您可以
使用在 Python2 和
Python3.
>>> from __future__ import print_function
>>>
>>> def printex(*args, **kwargs):
... print(*args, file=sys.stderr, **kwargs)
...
>>> printex("hii")
hii
>>>
案例:需要注意的一点是 sys.stderr.write() 或 sys.stdout.write()
(标准输出(标准输出)是一个内置于每个
UNIX/Linux 系统)不是打印的替代品,但是我们可以使用
在某些情况下,它可以作为替代方案。 Print 是一个包装器,用于包装
最后输入空格和换行符,并使用 write 函数
写。这就是 sys.stderr.write() 更快的原因。
注意:我们还可以使用 Logging 进行跟踪和调试
#test.py
import logging
logging.info('This is the existing protocol.')
FORMAT = "%(asctime)-15s %(clientip)s %(user)-8s %(message)s"
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning("Protocol problem: %s", "connection reset", extra=d)
https://docs.python.org/2/library/logging.html#logger-objects