Python日期时间1970-01-01 07:00:07
我有这样的代码片段:Python日期时间1970-01-01 07:00:07,python,datetime,Python,Datetime,我有这样的代码片段: import re from datetime import datetime as dt from pprint import pprint as pp __lin_regex = "(.*)msg='(.*)'" events = [ "type=USER_AUTH msg=audit(1565448223.294:46713): pid=4499 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:auth
import re
from datetime import datetime as dt
from pprint import pprint as pp
__lin_regex = "(.*)msg='(.*)'"
events = [
"type=USER_AUTH msg=audit(1565448223.294:46713): pid=4499 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication op-test acct=\"root\" exe=\"/usr/sbin/sshd\" hostname=49.88.112.75 addr=49.88.112.75 terminal=ssh res=failed'"
]
logs = {}
for event in events:
vm_info = ['name', 'id']
results = ''.join(list(re.match(__lin_regex, event).groups()))
split_results = results.split(' ')
split_results_length = len(split_results)
for i in range(0, split_results_length-1):
if split_results[i].find('=') == -1:
split_results[i - 1] = split_results[i - 1] + ' ' + split_results[i]
split_results.remove(split_results[i])
pid = split_results.pop(2).split('=')[1]
if pid not in logs:
logs[pid] = vm_info + [pid] + [item.split('=')[1] for item in split_results]
logs[pid][4] = dt.fromtimestamp(int(float(re.findall("([0-9.]+):", logs[pid][4])[0]))).strftime("%Y-%m-%d %H:%M:%S")
pp(logs)
但是当我有大量的事件时,它们的输出1970-01-01 07:00:07,当我尝试打印1000个数据时仍然有效,但当我打印所有数据时都无效,有什么想法吗?查看了您的代码,为了方便起见,替换/添加了以下行,这让我可以用相同的时间戳执行10000个事件,但不同的
pid
:
events = [
"type=USER_AUTH msg=audit(1565448223.294:46713): pid=4499 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication op-test acct=\"root\" exe=\"/usr/sbin/sshd\" hostname=49.88.112.75 addr=49.88.112.75 terminal=ssh res=failed'"
] * 10000
for i, event in enumerate(events):
events[i] = event.replace("pid=4499", "pid="+str(4499+i))
所有10000个事件的日期字符串输出都是正确的,因此我认为问题可能与(a)您的正则表达式或(b)您的输入数据有关
如果我是你,我调试它的方法就是使用,并查找你看到的示例输出,例如:
import pdb
... rest of your code ...
logs[pid][4] = dt.fromtimestamp(int(float(re.findall("([0-9.]+):", logs[pid][4])[0]))).strftime("%Y-%m-%d %H:%M:%S")
if logs[pid][4] == "1970-01-01 07:00:07":
pdb.set_trace()
此时,在交互式调试器中,您可以查看所涉及的变量&查看导致问题的输入事件字符串是什么(很可能,数据的格式没有您预期的那样好)。如果不明显,您可以通过使用n
&检查变量分配来单步检查代码,从而判断发生了什么
您可以使用!进口代码;code.interact(local=vars())
在调试器中,如果由于调试器命令而导致名称冲突,则可以将局部变量放入普通python shell中。发布不起作用的代码,以及您希望它做的事情不起作用,我们不知道这意味着什么。向我们展示一些实际的代码,并解释结果如何不是您想要的,也许我们可以提供帮助。问题更新