天天看點

系統資訊子產品psutil

本來這周打算基于glaphite來對系統服務進行監控,但是中間一直有個地方沒有搞明白,是以至于glaphite的web頁面監控可能要推遲到下周與朋友相見!

今天就和大家聊聊一個非常不錯的Python下系統資訊子產品pustil

簡介

psutil是一個跨平台庫,主要應用于系統監控,分析和限制系統資源及程序的管理;

CPU

記憶體

磁盤

網絡

程序

安裝

1

2

3

4

<code># wget https://pypi.python.org/packages/source/p/psutil/psutil-2.2.0.tar.gz --no-check-certificate </code>

<code># tar xf psutil-2.2.0.tar.gz </code>

<code># cd psutil-2.2.0</code>

<code># python setup.py install</code>

擷取系統性能資訊

(1)CPU資訊

User Time:執行使用者程序的時間百分比

System Time:執行核心程序和中斷的時間百分比

Wait IO:由于IO等待而使CPU處于idle(空閑)狀态的時間百分比

idle:CPU處于idle狀态的時間百分比

  先來看看psutil子產品中對cpu有哪些方法可以使用

<code>&gt;&gt;&gt; </code><code>import</code> <code>psutil</code>

<code>&gt;&gt;&gt; psutil.cpu_ (鍵盤tab鍵 指令補全)</code>

<code>psutil.cpu_count(    psutil.cpu_percent(  psutil.cpu_times(   psutil.cpu_times_percent(</code>

  分述psutil子產品中cpu方法的使用

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<code>#擷取CPU的實體個數</code>

<code>&gt;&gt;&gt; psutil.cpu_count(logical</code><code>=</code><code>False</code><code>)</code>

<code>#擷取CPU的邏輯個數,預設logical=True</code>

<code>&gt;&gt;&gt; psutil.cpu_count()</code>

<code>#擷取cpu負載的百分比</code>

<code>&gt;&gt;&gt; psutil.cpu_percent()</code>

<code>0.10000000000000001</code>

<code>#擷取cpu的完整資訊,需要顯示所有邏輯cpu資訊</code>

<code>&gt;&gt;&gt; psutil.cpu_times()</code>

<code>scputimes(user</code><code>=</code><code>3.2999999999999998</code><code>, nice</code><code>=</code><code>0.0</code><code>, system</code><code>=</code><code>16.329999999999998</code><code>, idle</code><code>=</code><code>8322.0400000000009</code><code>, iowait</code><code>=</code><code>21.93</code><code>, irq</code><code>=</code><code>0.46999999999999997</code><code>, softirq</code><code>=</code><code>0.54000000000000004</code><code>, steal</code><code>=</code><code>0.0</code><code>, guest</code><code>=</code><code>0.0</code><code>)</code>

<code>#擷取單項資料資訊,如使用者user的CPU時間比 </code>

<code>&gt;&gt;&gt; psutil.cpu_times().user</code>

<code>3.2999999999999998</code>

<code>#時間間隔,是否以清單形式輸出</code>

<code>&gt;&gt;&gt; psutil.cpu_times_percent(interval</code><code>=</code><code>2</code><code>,percpu</code><code>=</code><code>True</code><code>)</code>

<code>[scputimes(user</code><code>=</code><code>0.0</code><code>, nice</code><code>=</code><code>0.0</code><code>, system</code><code>=</code><code>0.0</code><code>, idle</code><code>=</code><code>100.0</code><code>, iowait</code><code>=</code><code>0.0</code><code>, irq</code><code>=</code><code>0.0</code><code>, softirq</code><code>=</code><code>0.0</code><code>, steal</code><code>=</code><code>0.0</code><code>, guest</code><code>=</code><code>0.0</code><code>)]</code>

(2)記憶體資訊

記憶體總數total

已使用的記憶體數used

空閑記憶體數free

緩沖區使用數buffers

緩存使用數cache

交換分區使用數swap

先來看看psutil子產品中對memory有哪些方法可以使用

<code>&gt;&gt;&gt; mem </code><code>=</code> <code>psutil.virtual_memory()    </code>

<code>&gt;&gt;&gt; mem.(鍵盤tab鍵 指令補全)</code>

<code>mem.active     mem.buffers    mem.count      mem.inactive   mem.percent    mem.used      </code>

<code>mem.available  mem.cached     mem.free       mem.index      mem.total</code>

分述psutil子產品中memory方法的使用

<code>#擷取擷取記憶體完整資訊</code>

<code>&gt;&gt;&gt; mem    </code>

<code>svmem(total</code><code>=</code><code>1960640512L</code><code>, available</code><code>=</code><code>1861410816L</code><code>, percent</code><code>=</code><code>5.0999999999999996</code><code>, used</code><code>=</code><code>158261248L</code><code>, free</code><code>=</code><code>1802379264L</code><code>, active</code><code>=</code><code>55451648</code><code>, inactive</code><code>=</code><code>35868672</code><code>, buffers</code><code>=</code><code>13492224L</code><code>, cached</code><code>=</code><code>45539328</code><code>)</code>

<code>#擷取記憶體總數</code>

<code>&gt;&gt;&gt; mem.total</code>

<code>1960640512L</code>

<code>#擷取使用記憶體</code>

<code>&gt;&gt;&gt; mem.used</code>

<code>158261248L</code>

<code>#擷取空閑記憶體</code>

<code>&gt;&gt;&gt; mem.free</code>

<code>1802379264L</code>

<code>#擷取swap分區資訊</code>

<code>&gt;&gt;&gt; psutil.swap_memory()</code>

<code>sswap(total</code><code>=</code><code>4160741376L</code><code>, used</code><code>=</code><code>0L</code><code>, free</code><code>=</code><code>4160741376L</code><code>, percent</code><code>=</code><code>0.0</code><code>, sin</code><code>=</code><code>0</code><code>, sout</code><code>=</code><code>0</code><code>)</code>

(3)硬碟資訊

使用率

IO

先來看看psutil子產品中對disk有哪些方法可以使用

<code>&gt;&gt;&gt; psutil.dis</code>

<code>psutil.disk_io_counters  psutil.disk_partitions   psutil.disk_usage</code>

分述psutil子產品中disk方法的使用

<code>#擷取磁盤的完整資訊</code>

<code>&gt;&gt;&gt; psutil.disk_partitions()</code>

<code>[sdiskpart(device</code><code>=</code><code>'/dev/mapper/VolGroup-lv_root'</code><code>, mountpoint</code><code>=</code><code>'/'</code><code>, fstype</code><code>=</code><code>'ext4'</code><code>, opts</code><code>=</code><code>'rw'</code><code>), sdiskpart(device</code><code>=</code><code>'/dev/sda1'</code><code>, mountpoint</code><code>=</code><code>'/boot'</code><code>, fstype</code><code>=</code><code>'ext4'</code><code>, opts</code><code>=</code><code>'rw'</code><code>)]</code>

<code>#擷取分區的使用情況</code>

<code>&gt;&gt;&gt; psutil.disk_usage(</code><code>'/'</code><code>)</code>

<code>sdiskusage(total</code><code>=</code><code>16521789440</code><code>, used</code><code>=</code><code>1433333760</code><code>, free</code><code>=</code><code>14249177088</code><code>, percent</code><code>=</code><code>8.6999999999999993</code><code>)</code>

<code>&gt;&gt;&gt; psutil.disk_usage(</code><code>'/boot'</code><code>)</code>

<code>sdiskusage(total</code><code>=</code><code>507744256</code><code>, used</code><code>=</code><code>33196032</code><code>, free</code><code>=</code><code>448333824</code><code>, percent</code><code>=</code><code>6.5</code><code>)</code>

<code>#擷取硬碟總的IO數</code>

<code>&gt;&gt;&gt; psutil.disk_io_counters()</code>

<code>sdiskio(read_count</code><code>=</code><code>7295</code><code>, write_count</code><code>=</code><code>7190</code><code>, read_bytes</code><code>=</code><code>116201472</code><code>, write_bytes</code><code>=</code><code>38065152</code><code>, read_time</code><code>=</code><code>123500</code><code>, write_time</code><code>=</code><code>33952</code><code>)</code>

<code>#擷取單個分區IO個數 讀寫資訊</code>

<code>&gt;&gt;&gt; psutil.disk_io_counters(perdisk</code><code>=</code><code>True</code><code>)</code>

<code>{</code><code>'dm-1'</code><code>: sdiskio(read_count</code><code>=</code><code>297</code><code>, write_count</code><code>=</code><code>0</code><code>, read_bytes</code><code>=</code><code>1216512</code><code>, write_bytes</code><code>=</code><code>0</code><code>, read_time</code><code>=</code><code>534</code><code>, write_time</code><code>=</code><code>0</code><code>), </code><code>'sda2'</code><code>: sdiskio(read_count</code><code>=</code><code>2462</code><code>, write_count</code><code>=</code><code>2543</code><code>, read_bytes</code><code>=</code><code>56902656</code><code>, write_bytes</code><code>=</code><code>19034112</code><code>, read_time</code><code>=</code><code>29130</code><code>, write_time</code><code>=</code><code>11733</code><code>), </code><code>'dm-0'</code><code>: sdiskio(read_count</code><code>=</code><code>3859</code><code>, write_count</code><code>=</code><code>4647</code><code>, read_bytes</code><code>=</code><code>55251968</code><code>, write_bytes</code><code>=</code><code>19034112</code><code>, read_time</code><code>=</code><code>93096</code><code>, write_time</code><code>=</code><code>22216</code><code>), </code><code>'sda1'</code><code>: sdiskio(read_count</code><code>=</code><code>677</code><code>, write_count</code><code>=</code><code>6</code><code>, read_bytes</code><code>=</code><code>2830336</code><code>, write_bytes</code><code>=</code><code>21504</code><code>, read_time</code><code>=</code><code>740</code><code>, write_time</code><code>=</code><code>5</code><code>)}</code>

(4)網絡資訊

發送位元組數

接收位元組數

發送資料包數

接收資料包數

先來看看psutil子產品中對network有哪些方法可以使用

<code>&gt;&gt;&gt; psutil.net</code>

<code>psutil.net_connections      psutil.net_io_counters      psutil.network_io_counters</code>

分述psutil子產品中nework方法的使用

<code>#擷取網絡總的IO資訊,預設pernic=False</code>

<code>&gt;&gt;&gt; psutil.net_io_counters()</code>

<code>snetio(bytes_sent</code><code>=</code><code>910776</code><code>, bytes_recv</code><code>=</code><code>13499265</code><code>, packets_sent</code><code>=</code><code>8757</code><code>, packets_recv</code><code>=</code><code>15556</code><code>, errin</code><code>=</code><code>0</code><code>, errout</code><code>=</code><code>0</code><code>, dropin</code><code>=</code><code>0</code><code>, dropout</code><code>=</code><code>0</code><code>)</code>

<code>#擷取每個網絡接口的IO資訊</code>

<code>&gt;&gt;&gt; psutil.net_io_counters(pernic</code><code>=</code><code>True</code><code>)</code>

<code>{</code><code>'lo'</code><code>: snetio(bytes_sent</code><code>=</code><code>0</code><code>, bytes_recv</code><code>=</code><code>0</code><code>, packets_sent</code><code>=</code><code>0</code><code>, packets_recv</code><code>=</code><code>0</code><code>, errin</code><code>=</code><code>0</code><code>, errout</code><code>=</code><code>0</code><code>, dropin</code><code>=</code><code>0</code><code>, dropout</code><code>=</code><code>0</code><code>), </code><code>'eth2'</code><code>: snetio(bytes_sent</code><code>=</code><code>911296</code><code>, bytes_recv</code><code>=</code><code>13405208</code><code>, packets_sent</code><code>=</code><code>8761</code><code>, packets_recv</code><code>=</code><code>14795</code><code>, errin</code><code>=</code><code>0</code><code>, errout</code><code>=</code><code>0</code><code>, dropin</code><code>=</code><code>0</code><code>, dropout</code><code>=</code><code>0</code><code>), </code><code>'eth1'</code><code>: snetio(bytes_sent</code><code>=</code><code>1788</code><code>, bytes_recv</code><code>=</code><code>98301</code><code>, packets_sent</code><code>=</code><code>18</code><code>, packets_recv</code><code>=</code><code>803</code><code>, errin</code><code>=</code><code>0</code><code>, errout</code><code>=</code><code>0</code><code>, dropin</code><code>=</code><code>0</code><code>, dropout</code><code>=</code><code>0</code><code>)}</code>

<code>#擷取所有接口的網卡資訊</code>

<code>&gt;&gt;&gt; psutil.net_connections()</code>

<code>[sconn(fd</code><code>=</code><code>3</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'0.0.0.0'</code><code>, </code><code>22</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'LISTEN'</code><code>, pid</code><code>=</code><code>1110</code><code>), sconn(fd</code><code>=</code><code>12</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'127.0.0.1'</code><code>, </code><code>25</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'LISTEN'</code><code>, pid</code><code>=</code><code>1186</code><code>), sconn(fd</code><code>=</code><code>3</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'192.168.10.26'</code><code>, </code><code>22</code><code>), raddr</code><code>=</code><code>(</code><code>'192.168.10.1'</code><code>, </code><code>54342</code><code>), status</code><code>=</code><code>'ESTABLISHED'</code><code>, pid</code><code>=</code><code>1794</code><code>), sconn(fd</code><code>=</code><code>4</code><code>, family</code><code>=</code><code>10</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'::'</code><code>, </code><code>22</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'LISTEN'</code><code>, pid</code><code>=</code><code>1110</code><code>), sconn(fd</code><code>=</code><code>13</code><code>, family</code><code>=</code><code>10</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'::1'</code><code>, </code><code>25</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'LISTEN'</code><code>, pid</code><code>=</code><code>1186</code><code>), sconn(fd</code><code>=</code><code>6</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>2</code><code>, laddr</code><code>=</code><code>(</code><code>'0.0.0.0'</code><code>, </code><code>68</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'NONE'</code><code>, pid</code><code>=</code><code>1745</code><code>), sconn(fd</code><code>=</code><code>6</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>2</code><code>, laddr</code><code>=</code><code>(</code><code>'0.0.0.0'</code><code>, </code><code>68</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'NONE'</code><code>, pid</code><code>=</code><code>1643</code><code>)]</code>

<code>#擷取指定接口的網卡資訊</code>

<code>&gt;&gt;&gt; psutil.net_connections(kind</code><code>=</code><code>'inet4'</code><code>)</code>

<code>[sconn(fd</code><code>=</code><code>3</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'0.0.0.0'</code><code>, </code><code>22</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'LISTEN'</code><code>, pid</code><code>=</code><code>1110</code><code>), sconn(fd</code><code>=</code><code>12</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'127.0.0.1'</code><code>, </code><code>25</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'LISTEN'</code><code>, pid</code><code>=</code><code>1186</code><code>), sconn(fd</code><code>=</code><code>3</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>1</code><code>, laddr</code><code>=</code><code>(</code><code>'192.168.10.26'</code><code>, </code><code>22</code><code>), raddr</code><code>=</code><code>(</code><code>'192.168.10.1'</code><code>, </code><code>54342</code><code>), status</code><code>=</code><code>'ESTABLISHED'</code><code>, pid</code><code>=</code><code>1794</code><code>), sconn(fd</code><code>=</code><code>6</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>2</code><code>, laddr</code><code>=</code><code>(</code><code>'0.0.0.0'</code><code>, </code><code>68</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'NONE'</code><code>, pid</code><code>=</code><code>1745</code><code>), sconn(fd</code><code>=</code><code>6</code><code>, family</code><code>=</code><code>2</code><code>, </code><code>type</code><code>=</code><code>2</code><code>, laddr</code><code>=</code><code>(</code><code>'0.0.0.0'</code><code>, </code><code>68</code><code>), raddr</code><code>=</code><code>(), status</code><code>=</code><code>'NONE'</code><code>, pid</code><code>=</code><code>1643</code><code>)]</code>

(5)其它系統資訊

使用者登入

開機時間

具體操作列子如下:

<code>#擷取目前登入系統的使用者資訊</code>

<code>&gt;&gt;&gt; psutil.users()</code>

<code>[suser(name</code><code>=</code><code>'root'</code><code>, terminal</code><code>=</code><code>'tty1'</code><code>, host</code><code>=</code><code>'</code><code>', started=1427459328.0), suser(name='</code><code>root</code><code>', terminal='</code><code>pts</code><code>/</code><code>0</code><code>', host='</code><code>192.168</code><code>.</code><code>10.1</code><code>', started=1427459456.0), suser(name='</code><code>root</code><code>', terminal='</code><code>pts</code><code>/</code><code>1</code><code>', host='</code><code>192.168</code><code>.</code><code>10.1</code><code>', started=1427459456.0), suser(name='</code><code>root</code><code>', terminal='</code><code>pts</code><code>/</code><code>2</code><code>', host='</code><code>192.168</code><code>.</code><code>10.1</code><code>', started</code><code>=</code><code>1427459584.0</code><code>)]</code>

<code>&gt;&gt;&gt; </code><code>len</code><code>(psutil.users())</code>

<code>4</code>

<code>#擷取系統開機時間并格式化輸出</code>

<code>&gt;&gt;&gt; datetime.datetime.fromtimestamp(psutil.boot_time()).strftime(</code><code>'%Y-%m-%d %H:%M:%S'</code><code>)</code>

<code>'2015-03-27 20:27:36'</code>

系統程序管理方法

(1)程序信心

程序PID

單個程序名稱

路徑

狀态

系統資源使用率

22

23

24

25

26

27

28

29

30

31

32

<code>&gt;&gt;&gt; psutil.pids()    列出所有程序的PID</code>

<code>[</code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>, </code><code>4</code><code>, </code><code>5</code><code>, </code><code>6</code><code>, </code><code>7</code><code>, </code><code>8</code><code>, </code><code>9</code><code>, </code><code>10</code><code>, </code><code>11</code><code>, </code><code>12</code><code>, </code><code>13</code><code>, </code><code>14</code><code>, </code><code>15</code><code>, </code><code>16</code><code>, </code><code>17</code><code>, </code><code>18</code><code>, </code><code>19</code><code>, </code><code>20</code><code>, </code><code>21</code><code>, </code><code>22</code><code>, </code><code>23</code><code>, </code><code>24</code><code>, </code><code>25</code><code>, </code><code>26</code><code>, </code><code>27</code><code>, </code><code>28</code><code>, </code><code>29</code><code>, </code><code>30</code><code>, </code><code>31</code><code>, </code><code>32</code><code>, </code><code>37</code><code>, </code><code>38</code><code>, </code><code>40</code><code>, </code><code>41</code><code>, </code><code>71</code><code>, </code><code>199</code><code>, </code><code>203</code><code>, </code><code>218</code><code>, </code><code>219</code><code>, </code><code>220</code><code>, </code><code>325</code><code>, </code><code>327</code><code>, </code><code>344</code><code>, </code><code>345</code><code>, </code><code>364</code><code>, </code><code>417</code><code>, </code><code>569</code><code>, </code><code>764</code><code>, </code><code>765</code><code>, </code><code>817</code><code>, </code><code>1042</code><code>, </code><code>1058</code><code>, </code><code>1070</code><code>, </code><code>1110</code><code>, </code><code>1186</code><code>, </code><code>1194</code><code>, </code><code>1197</code><code>, </code><code>1209</code><code>, </code><code>1211</code><code>, </code><code>1213</code><code>, </code><code>1215</code><code>, </code><code>1217</code><code>, </code><code>1219</code><code>, </code><code>1228</code><code>, </code><code>1229</code><code>, </code><code>1231</code><code>, </code><code>1298</code><code>, </code><code>1643</code><code>, </code><code>1745</code><code>, </code><code>1794</code><code>, </code><code>1796</code><code>, </code><code>1829</code><code>, </code><code>1846</code><code>, </code><code>2004</code><code>, </code><code>2039</code><code>, </code><code>2154</code><code>, </code><code>2175</code><code>]</code>

<code>&gt;&gt;&gt; p </code><code>=</code> <code>psutil.Process(</code><code>2154</code><code>)    執行個體化一個Process對象,參數為一個程序的PID</code>

<code>&gt;&gt;&gt; p.name()    程序名</code>

<code>'python'</code>

<code>&gt;&gt;&gt; p.exe()    程序</code><code>bin</code><code>路徑</code>

<code>'/usr/bin/python'</code>

<code>&gt;&gt;&gt; p.cwd()    程序工作目錄絕對路徑</code>

<code>'/root'</code>

<code>&gt;&gt;&gt; p.status()    程序狀态</code>

<code>'running'</code>

<code>&gt;&gt;&gt; p.create_time()    程序建立時間、時間戳格式</code>

<code>1427469528.49</code>

<code>&gt;&gt;&gt; p.uids()    程序uid資訊</code>

<code>puids(real</code><code>=</code><code>0</code><code>, effective</code><code>=</code><code>0</code><code>, saved</code><code>=</code><code>0</code><code>)</code>

<code>&gt;&gt;&gt; p.gids()    程序gid資訊</code>

<code>pgids(real</code><code>=</code><code>0</code><code>, effective</code><code>=</code><code>0</code><code>, saved</code><code>=</code><code>0</code><code>)</code>

<code>&gt;&gt;&gt; p.cpu_times()    程序CPU時間資訊</code>

<code>pcputimes(user</code><code>=</code><code>0.059999999999999998</code><code>, system</code><code>=</code><code>0.050000000000000003</code><code>)</code>

<code>&gt;&gt;&gt; p.cpu_affinity()    get程序CPU親和度</code>

<code>[</code><code>0</code><code>]</code>

<code>&gt;&gt;&gt; p.memory_percent()    程序記憶體使用率</code>

<code>0.43265534645853532</code>

<code>&gt;&gt;&gt; p.memory_info()    程序記憶體rss、vms資訊</code>

<code>pmem(rss</code><code>=</code><code>8486912</code><code>, vms</code><code>=</code><code>185946112</code><code>)</code>

<code>&gt;&gt;&gt; p.io_counters()    程序IO資訊,包括讀寫IO數及位元組數</code>

<code>pio(read_count</code><code>=</code><code>2206</code><code>, write_count</code><code>=</code><code>1286</code><code>, read_bytes</code><code>=</code><code>40960</code><code>, write_bytes</code><code>=</code><code>0</code><code>)</code>

<code>&gt;&gt;&gt; p.connections()    傳回打開程序socket的namedutples清單</code>

<code>[]</code>

<code>&gt;&gt;&gt; p.num_threads()    程序開啟的線程數</code>

<code>1</code>

(2)popen類的使用

psutil提供了popen類的作用是擷取使用者啟動的應用程式程序資訊,以便跟蹤程式程序的運作狀态。

<code>#定義</code>

<code>&gt;&gt;&gt; </code><code>from</code> <code>subprocess </code><code>import</code> <code>PIPE</code>

<code>&gt;&gt;&gt; p </code><code>=</code> <code>psutil.Popen([</code><code>'/usr/bin/python'</code><code>,</code><code>'-c'</code><code>,</code><code>'print("hello world.")'</code><code>],stdout</code><code>=</code><code>PIPE)</code>

<code>#擷取</code>

<code>&gt;&gt;&gt; p.name()</code>

<code>&gt;&gt;&gt; p.username()</code>

<code>'root'</code>

<code>&gt;&gt;&gt; p.communicate()</code>

<code>(</code><code>'hello world.\n'</code><code>, </code><code>None</code><code>)</code>

<code>&gt;&gt;&gt; p.cpu_times()</code>

<code>pcputimes(user</code><code>=</code><code>0.01</code><code>, system</code><code>=</code><code>0.0</code><code>)</code>

補充:2015-03-28

psutil大小機關一般都采用位元組,檢視起來很不舒服!那麼我們就用雅觀的方式來顯示記憶體的資訊

<code>首先定義機關換算字典</code>

<code>unit </code><code>=</code> <code>{</code><code>'b'</code><code>:</code><code>1</code><code>, </code><code>'k'</code><code>:</code><code>2</code><code>*</code><code>*</code><code>10</code><code>, </code><code>'m'</code><code>:</code><code>2</code><code>*</code><code>*</code><code>20</code><code>, </code><code>'g'</code><code>:</code><code>2</code><code>*</code><code>*</code><code>30</code><code>}</code>

<code>統計記憶體的總數并換算機關</code>

<code>&gt;&gt;&gt; mem </code><code>=</code> <code>psutil.virtual_memory()</code>

<code>&gt;&gt;&gt; mem.total</code><code>/</code><code>unit[</code><code>'m'</code><code>]    </code><code>#以M的機關顯示,并保留整數</code>

<code>1869L</code>

<code>&gt;&gt;&gt; mem.total</code><code>/</code><code>unit[</code><code>'g'</code><code>]    </code><code>#以G的機關顯示,并保留整數</code>

<code>1L</code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>'%.2f'</code> <code>%</code><code>(</code><code>float</code><code>(mem.total)</code><code>/</code><code>unit[</code><code>'m'</code><code>])    </code><code>#保留兩位小數</code>

<code>1869.81</code>

<code>&gt;&gt;&gt; </code><code>print</code> <code>'%.2f'</code> <code>%</code><code>(</code><code>float</code><code>(mem.total)</code><code>/</code><code>unit[</code><code>'g'</code><code>])    </code><code>#保留兩位小數</code>

<code>1.83</code>

所謂萬世追究其根源,psutil的強大無非就是在底層封裝了一些庫,我們直接調用就可以了,實質上也是通過讀取檔案的形式來擷取的。

     本文轉自zys467754239 51CTO部落格,原文連結:http://blog.51cto.com/467754239/1625819,如需轉載請自行聯系原作者