我想检查偏移时间是否大于0.5秒并做一些动作.
我正在运行命令ntpdate -q< Server ip address>
有人能告诉我如何捕获变量中的偏移值,以便我可以执行进一步的操作?
解决方法:
解
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不起作用,这应该这样做.