【问题标题】:Convert "jiffy" time [duplicate]转换“jiffy”时间[重复]
【发布时间】:2014-01-23 12:14:06
【问题描述】:

在 linux 上,我正在用 python 编写一个脚本来处理文件/proc/net/xt_recent/PORTSCAN,它看起来像这样:

src=123.45.67.89 ttl: 64 last_seen: 4298265432 oldest_pkt: 1 4298265432
src=132.45.67.89 ttl: 64 last_seen: 4298265432 oldest_pkt: 1 4298265432
src=231.45.67.89 ttl: 64 last_seen: 4298265432 oldest_pkt: 1 4298265432

最后一列(即 4298265432)是“jiffy”格式的 AFAIU 时间。

如何在 python 中将其转换为人类可理解的东西?例如,我想知道从那以后经过了多少秒。

【问题讨论】:

  • 它不是重复的。我没有看到任何可以回答我的问题的东西。
  • 我需要在 python 中完成,而不是在 C 中

标签: python datetime


【解决方案1】:

为了转换 jiffies,您必须首先找到 HZ 的内核常量值。你可以使用os.sysconf

import os

sc_clk_tck = os.sysconf_names['SC_CLK_TCK']
HZ = os.sysconf(sc_clk_tck)

从这里你要查找系统启动时间:

with open('/proc/stat') as f:
    for ln in f.readlines():
        if ln.startswith('btime'):
            btime = int(ln.split()[1])

将此值添加到您要转换的 jiffy 值除以 HZ

(packet_jiffy / HZ) + btime

您可以将此值传递给time.ctime 和/或从time.time 中减去它。

import os
import time

sc_clk_tck = os.sysconf_names['SC_CLK_TCK']
HZ = os.sysconf(sc_clk_tck)

with open('/proc/stat') as f:
    for ln in f.readlines():
        if ln.startswith('btime'):
            btime = ln.split()[1]


packet_time = (packet_jiffy / HZ) + btime
print time.ctime(packet_time)
print "Seconds ago %d" % (time.time() - packet_time)

这个post 有更多关于转换 jiffies 的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多