我使用下面的代码将时间戳添加到打印中。但奇怪的是,为什么它在消息周围添加了两个时间戳。你知道吗
old_f = sys.stdout
class CFout:
def write(self, x):
old_f.write("%s %s " % (datetime.now().strftime("%d/%m/%Y %H:%M:%S:%f"), x))
sys.stdout = CFout()
当我print True
。它的输出如下。你知道吗
15/05/2015 05:42:02:121945 True 15/05/2015 05:42:02:121977
在True
之前和之后,有两个时间戳。
为什么会这样?我只想在True
之前添加时间戳。你知道吗
基于@Bakuriu answer,我使用下面的代码来实现我的目标,因为我相信我不会在打印消息中使用“\n”。:). 如果其他人也感兴趣,我会在这里发帖。你知道吗
这是因为
print
语句或函数对write
执行两个调用,一个用于打印消息('True'
),另一个用于结束换行符或空格。你知道吗您可以使用如下脚本看到这一点:
调用结果:
注:
'True'
和'\n'
是执行print True
时执行的两个调用的参数。你知道吗'False'
和'\n'
是执行print False
时执行的两个调用的参数'1'
、' '
、'2'
、' '
、'3'
和'\n'
是执行print 1,2,3
时执行的参数。你知道吗另一种方法是使用异常:
注意:即使
1/0
引发了一个异常,1
仍然被打印。python所做的是将每一部分内容打印出来,对其求值,然后调用write
。之后它调用write(' ')
来打印逗号引起的空格,最后计算1/0
,这将导致异常。你知道吗以同样的方式
print True
首先计算True
,然后调用write(str(True))
,最后调用write('\n')
来添加最后的换行符。你知道吗如果您想适当地为消息附加一个时间戳,那么应该改用^{} 模块。你知道吗
相关问题 更多 >
编程相关推荐