Linux

在python中的變數中獲取ntpdate偏移值

  • August 17, 2016

我希望檢查偏移時間是否大於 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 來執行動作。


我也沒有代表發表評論,哈。您能否讓我知道伺服器正在執行@Iram Khan 的哪個版本的python?



```
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 不起作用,應該這樣做。

引用自:https://unix.stackexchange.com/questions/303705