我想检查偏移时间是否大于 0.5 秒并执行一些操作。我正在运行命令ntpdate -q <Server ip address>
有人可以告诉我应该如何捕获变量中的偏移值以便我可以执行进一步的操作吗?
答案1
解决方案
import subprocess
output = subprocess.check_output('ntpdate -q 3.us.pool.ntp.org | head -1 | cut -d " " -f 6 | sed "s/.$//"', shell=True)
您可以将“3.us.pool.ntp.org”服务器名称更改为您选择的 NTP 服务器。
使用此方法,输出变量将包含仅有的ntpdate 命令输出的第一行中指定的偏移量,您可以在之后对该数字执行您想要的操作。
if output > X:
do something...
解释
您已经(清楚地)知道 ntpdate 的作用,因此您会知道它返回的输出对于您尝试执行的操作有很多无用的信息。
Subprocess 允许您从 python 脚本中运行 bash 命令
check_output 完全按照其说明进行操作,在本例中,将其存储在输出变量中。
如果像我在示例中那样使用池,则 head -1 仅采用 ntpdate 输出的顶行(各种结果不应该变化很大,所以顶部应该没问题)。
cut 将行视为由空格字符分隔的字段。它排序并选出第 6 个字段,即偏移值。
sed 从该值中删除最后一个字符,这是一个逗号,并且会破坏您实际使用该值的任何尝试。
shell=True 调用 shell 来执行该操作。
~~~~~~~~~编辑~~~~~~~~~~~~
我也没有代表发表评论,哈哈。你能让我知道服务器正在运行哪个版本的 python @Iram Khan 吗?
python -V
我怀疑它的版本 < 2.7,因为添加了 check_output 功能。在这种情况下,您可能需要将上述内容更改为:
import subprocess
cmd = "ntpdate -q 3.us.pool.ntp.org | head -1 | cut -d ' ' -f 6 | sed 's/.$//'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
如果 check_output 不起作用,这应该可以做到。
答案2
使用 backtics `` 进行命令评估并将输出分配给变量
OFFSET=`ntpdate -q <Server ip address> |sed 's/.*\(offset\) \([0-9]\.[0-9]\+\).*/\2/'`
if [[ $OFFSET -gt 0.5 ]]; then
<do something...>
fi