Python之psutil

psutil

簡(jiǎn)介psutil是一個(gè)跨平臺(tái)(http://code.google.com/p/psutil)荞怒,能夠輕松實(shí)現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率包括(保存CPU、內(nèi)存秧秉、磁盤褐桌、網(wǎng)絡(luò)等)信息。它實(shí)現(xiàn)了同等命令行工具提供的功能象迎,如ps荧嵌、toplsof砾淌、 netstat啦撮、 ifconfigwho汪厨、 df赃春、 killfree 劫乱、nice织中、 ioniceiostat衷戈、iotop 狭吼、uptimepidof殖妇、 tty刁笙、 tasksetpmap

安裝

https://www.cnblogs.com/liu-yao/p/5678157.html

yum install -y python-pip

功能函數(shù)

  • CPU相關(guān)
  • Memory內(nèi)存相關(guān)
  • Disk相關(guān)
  • Network相關(guān)
  • 進(jìn)程管理

CPU

函數(shù) 描述
psutil.cpu_count() cpu_count(,[logical]):默認(rèn)返回邏輯CPU的個(gè)數(shù),當(dāng)設(shè)置logical的參數(shù)為False時(shí)谦趣,返回物理CPU的個(gè)數(shù)疲吸。
psutil.cpu_percent() cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu為True時(shí)顯示所有物理核心的利用率,interval不為0時(shí),則阻塞時(shí)顯示interval執(zhí)行的時(shí)間內(nèi)的平均利用率
psutil.cpu_times() cpu_times(,[percpu]):以命名元組(namedtuple)的形式返回cpu的時(shí)間花費(fèi),percpu=True表示獲取每個(gè)CPU的時(shí)間花費(fèi)
psutil.cpu_times_percent() cpu_times_percent(,[percpu]):功能和cpu_times大致相同,看字面意思就能知道前鹅,該函數(shù)返回的是耗時(shí)比例磅氨。
psutil.cpu_stats() cpu_stats()以命名元組的形式返回CPU的統(tǒng)計(jì)信息,包括上下文切換嫡纠,中斷烦租,軟中斷和系統(tǒng)調(diào)用次數(shù)延赌。
psutil.cpu_freq() cpu_freq([percpu]):返回cpu頻率

示例

import psutil
# 查看cpu個(gè)數(shù)
psutil.cpu_count() # 2
psutil.cpu_count(logical=True) # 2
psutil.cpu_count(logical=False) # 2
# 查看cpu利用率
psutil.cpu_percent() # 0.8
psutil.cpu_percent(percpu=True) # [0.8, 0.7]
# 查看cpu時(shí)間花費(fèi)
psutil.cpu_times() # scputimes(user=96.72, nice=0.09, system=97.48, idle=45351.82, iowait=8.11, irq=0.0, softirq=5.15, steal=0.0, guest=0.0, guest_nice=0.0)

psutil.cpu_times(percpu=True) 
# [scputimes(user=45.88, nice=0.07, system=50.23, idle=22705.37, iowait=0.48, irq=0.0, softirq=1.89, steal=0.0, guest=0.0, guest_nice=0.0),scputimes(user=50.93, nice=0.01, system=47.35, idle=22670.42, iowait=7.62, irq=0.0, softirq=3.26, steal=0.0, guest=0.0, guest_nice=0.0)]

cpu_time = psutil.cpu_times()
cpu_time.user # 97.99 根據(jù)cpu_time獲取響應(yīng)的值

Memory

virtual_memory():以命名元組的形式返回內(nèi)存使用情況,包括總內(nèi)存叉橱,可用內(nèi)存挫以,內(nèi)存利用率,buffer和cache等窃祝。單位為字節(jié)掐松。

psutil.virtual_memory() # svmem(total=4125122560L, available=3663482880L, percent=11.2, used=1014362112L, free=3110760448L, active=458932224, inactive=325615616, buffers=2125824L, cached=550596608)

swap_memory():以命名元組的形式返回swap/memory使用情況,包含swap中頁的換入和換出粪小。

psutil.swap_memory() # sswap(total=1073737728L, used=0L, free=1073737728L, percent=0.0, sin=0, sout=0)

單位轉(zhuǎn)換

import psutil
def bytes2human(n):
     symbols = ('K','M','G','T','P','E','Z','Y')
     prefix = {}
     for i,s in enumerate(symbols):
         prefix[s] = 1 << (i + 1) * 10
     for s in reversed(symbols):
         if n >= prefix[s]:
             value = float(n) / prefix[s]
             return '%.1f%s' % (value,s)
     return '%sB' % n
print bytes2human(psutil.virtual_memory().total)

Disk

函數(shù) 描述
psutil.disk_io_counters() disk_io_counters([perdisk]):以命名元組的形式返回磁盤io統(tǒng)計(jì)信息(匯總的)大磺,包括讀、寫的次數(shù)探膊,讀杠愧、寫的字節(jié)數(shù)等。 當(dāng)perdisk的值為True逞壁,則分別列出單個(gè)磁盤的統(tǒng)計(jì)信息(字典:key為磁盤名稱流济,value為統(tǒng)計(jì)的namedtuple)。
psutil.disk_partitions() disk_partitions([all=False]):以命名元組的形式返回所有已掛載的磁盤腌闯,包含磁盤名稱绳瘟,掛載點(diǎn),文件系統(tǒng)類型等信息姿骏。 當(dāng)all等于True時(shí)糖声,返回包含/proc等特殊文件系統(tǒng)的掛載信息
psutil.disk_usage() disk_usage(path):以命名元組的形式返回path所在磁盤的使用情況,包括磁盤的容量分瘦、已經(jīng)使用的磁盤容量姨丈、磁盤的空間利用率等。

示例

# 查看所有已掛在的磁盤
psutil.disk_partitions() #[sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'),sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 使用列表表達(dá)式查詢指定掛載點(diǎn)信息
[device for device in psutil.disk_partitions() if device.mountpoint == '/']
# [sdiskpart(device='/dev/sda3', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]
# 查看磁盤使用情況
psutil.disk_usage('/') #sdiskusage(total=20179845120, used=2114883584, free=18064961536, percent=10.5)
# 查看磁盤io統(tǒng)計(jì)匯總
psutil.disk_io_counters() #sdiskio(read_count=5964, write_count=35722, read_bytes=249860608, write_bytes=629057536, read_time=3929, write_time=108205)
# 分別列出單個(gè)磁盤的統(tǒng)計(jì)信息
psutil.disk_io_counters(perdisk=True)
# 輸出結(jié)果
{'sda1': sdiskio(read_count=508, write_count=519, read_bytes=5687808, write_bytes=2117632, read_time=88, write_time=69),
 'sda2': sdiskio(read_count=52, write_count=0, read_bytes=2265088, write_bytes=0, read_time=19, write_time=0),
 'sda3': sdiskio(read_count=5404, write_count=35240, read_bytes=241907712, write_bytes=627201024, read_time=3822, write_time=108206),
 'sr0': sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0)}

Network

函數(shù) 詳情
psutil.net_io_counter([pernic]) 以命名元組的形式返回當(dāng)前系統(tǒng)中每塊網(wǎng)卡的網(wǎng)絡(luò)io統(tǒng)計(jì)信息擅腰,包括收發(fā)字節(jié)數(shù),收發(fā)包的數(shù)量翁潘、出錯(cuò)的情況和刪包情況趁冈。當(dāng)pernic為True時(shí),則列出所有網(wǎng)卡的統(tǒng)計(jì)信息拜马。
psutil.net_connections([kind]) 以列表的形式返回每個(gè)網(wǎng)絡(luò)連接的詳細(xì)信息(namedtuple)渗勘。命名元組包含fd, family, type, laddr, raddr, status, pid等信息。kind表示過濾的連接類型俩莽,支持的值如下:(默認(rèn)為inet)
psutil.net_if_addrs() 以字典的形式返回網(wǎng)卡的配置信息旺坠,包括IP地址和mac地址、子網(wǎng)掩碼和廣播地址扮超。
psutil.net_if_stats() 返回網(wǎng)卡的詳細(xì)信息取刃,包括是否啟動(dòng)蹋肮、通信類型、傳輸速度與mtu璧疗。
psutil.users() 以命名元組的方式返回當(dāng)前登陸用戶的信息坯辩,包括用戶名,登陸時(shí)間崩侠,終端漆魔,與主機(jī)信息
psutil.boot_time() 以時(shí)間戳的形式返回系統(tǒng)的啟動(dòng)時(shí)間

示例

# 查看網(wǎng)卡信息統(tǒng)計(jì)
psutil.net_io_counters() # snetio(bytes_sent=2436593, bytes_recv=86547298, packets_sent=29381, packets_recv=66642, errin=0, errout=0, dropin=0, dropout=0)
# 查看網(wǎng)卡配置信息
psutil.net_if_addrs()
a = psutil.net_if_addrs()
a['eth0']
# 查看當(dāng)前登錄用戶信息
psutil.users() # [suser(name='root', terminal='tty1', host='', started=1591149568.0),
 suser(name='root', terminal='pts/0', host='192.168.8.1', started=1591149568.0),
 suser(name='root', terminal='pts/1', host='192.168.8.1', started=1591149824.0)]

進(jìn)程管理

函數(shù) 詳情
psutil.pids() 以列表的形式返回當(dāng)前正在運(yùn)行的進(jìn)程
psutil.pid_exists(1) 判斷給點(diǎn)定的pid是否存在
psutil.process_iter() 迭代當(dāng)前正在運(yùn)行的進(jìn)程,返回的是每個(gè)進(jìn)程的Process對(duì)象
psutil.Process() 對(duì)進(jìn)程進(jìn)行封裝却音,可以使用該類的方法獲取進(jìn)行的詳細(xì)信息改抡,或者給進(jìn)程發(fā)送信號(hào)

進(jìn)程相關(guān)信息的方法

  • name:獲取進(jìn)程的名稱
  • cmdline:獲取啟動(dòng)進(jìn)程的命令行參數(shù)
  • create_time:獲取進(jìn)程的創(chuàng)建時(shí)間(時(shí)間戳格式)
  • num_fds:進(jìn)程打開的文件個(gè)數(shù)
  • num_threads:進(jìn)程的子進(jìn)程個(gè)數(shù)
  • is_running:判斷進(jìn)程是否正在運(yùn)行
  • send_signal:給進(jìn)程發(fā)送信號(hào),類似與os.kill等
  • kill:發(fā)送SIGKILL信號(hào)結(jié)束進(jìn)程
  • terminate:發(fā)送SIGTEAM信號(hào)結(jié)束進(jìn)程

示例

# 以列表形式查看正在運(yùn)行的進(jìn)程
psutil.pids() # [1,2,3,5,7,8,9,10,11,12,13,14,...
# 查看進(jìn)程運(yùn)行狀態(tài)系瓢,以布爾形式顯示
psutil.pid_exists(1) # True
# 迭代當(dāng)前正在運(yùn)行進(jìn)程阿纤,查看列表中前三個(gè)實(shí)例的信息
list(psutil.process_iter())[:3] #  [<psutil.Process(pid=1, name='systemd') at 139918970276112>,<psutil.Process(pid=2, name='kthreadd') at 139918970317904>,<psutil.Process(pid=3, name='ksoftirqd/0') at 139918970214416>]
# 通過進(jìn)程號(hào)實(shí)例化對(duì)象
process = psutil.Process(1) # <psutil.Process(pid=1, name='systemd') at 139918970212944>
# 獲取進(jìn)程的名稱
process.name() # 'systemd'
process.create_time() # 1591149592.13
process.num_fds() # 41
process.num_threads() # 1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市八拱,隨后出現(xiàn)的幾起案子阵赠,更是在濱河造成了極大的恐慌,老刑警劉巖肌稻,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件清蚀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爹谭,警方通過查閱死者的電腦和手機(jī)枷邪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诺凡,“玉大人东揣,你說我怎么就攤上這事「姑冢” “怎么了嘶卧?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凉袱。 經(jīng)常有香客問我芥吟,道長(zhǎng),這世上最難降的妖魔是什么专甩? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任钟鸵,我火速辦了婚禮,結(jié)果婚禮上涤躲,老公的妹妹穿的比我還像新娘棺耍。我一直安慰自己,他們只是感情好种樱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布蒙袍。 她就那樣靜靜地躺著俊卤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪左敌。 梳的紋絲不亂的頭發(fā)上瘾蛋,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音矫限,去河邊找鬼哺哼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叼风,可吹牛的內(nèi)容都是我干的取董。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼无宿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茵汰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起孽鸡,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤蹂午,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后彬碱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豆胸,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年巷疼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晚胡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嚼沿,死狀恐怖估盘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骡尽,我是刑警寧澤遣妥,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站攀细,受9級(jí)特大地震影響箫踩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辨图,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肢藐。 院中可真熱鬧故河,春花似錦、人聲如沸吆豹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凑阶,卻和暖如春猿规,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宙橱。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工姨俩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人师郑。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓环葵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宝冕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子张遭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345