带时间戳的python print语句

时间:2017-11-09 14:12:12

标签: python-3.x

我的要求是拥有一个与print完全相同的功能,但在顶部添加时间戳

目前我使用

之类的东西
def tprint(var):
    print(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+" :: "+str(var))

虽然它为我提供了特定集合的所有必需输出,例如

tprint("dummy"+" print")
2017-11-09 19:38:42 :: dummy print

我无法完全将其变换为print语句,例如 tprint(" hi","你好")和tprint(" a =",a,sep =' 0',end =& #39;')失败。我的要求不是理想地使这两个陈述有效。但是要为print创建一个替代函数,该函数适用于所有打印参数,但会提供额外的时间戳。我相信这可能不是一个直接的解决方案。但如果有人已经想出任何类似的方法,不要错过。

1 个答案:

答案 0 :(得分:1)

修改

在查看了您想要的内容后,为什么不将所需的值传递给使用内置print()的函数?像这样:

def tprint(*args, *kwargs):
    stamp = str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    print(stamp + ' :: ', *args, sep = kwargs['sep'], end = kwargs['end'])

a = 'Hello World'
tprint("a =", a, sep='0000', end='')

>>> [whatever the timestamp is] :: 0000a =0000Hello World

为了提供更好的响应,我真的需要知道你的预期输出会给出一个例子。到目前为止,你只说了什么有效或无效,但不是为什么或如何看。

原始回复:

在函数定义中使用*args参数。它允许您在函数调用中提供可选的(未指定的)数量的参数,并将它们收集到列表中。

definition,关键字参数必须在所有*args参数之后。 **kwargs将它们打包到字典中以进行迭代。更多信息可在thisthat上获取。

所以你可以这样做:

def tprint(*args, **kwargs):
    tempa = ' '.join(str(a) for a in args)
    tempk = ' '.join([str(kwargs[k]) for k in kwargs])
    temp = tempa + ' ' + tempk # puts a space between the two for clean output
    print(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) + " :: " + temp)


a = 'Hello World!'

tprint("a =", a, sep='0', end='')

>>> 2017-11-09 09:35:37.148780 :: a = Hello World! 0 # I used datetime.datetime.now()