1. 程式人生 > >Python對Linux系統的操作模塊

Python對Linux系統的操作模塊

管理 init soc affinity virtual 系統 time save cache

1、pip安裝(pip 是“A tool for installing and managing Python packages.”,也就是說pip是python的軟件安裝工具)
yum -y install epel-release
yum -y install python-pip
yum -y install python-devel
yum -y install gcc*


2、下載psutil(或使用 pip install psutil 安裝)
wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.2.tar.gz
tar zxvf psutil-3.2.2.tar.gz
cd psutil-3.2.2/
python setup.py install


3、清除緩存
yum clean all


4、python進入python命令行
[[email protected]

/* */ ~]# python
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
導入psutil
>>> import psutil


5、cpu完整信息(命令top -bn 1 -i -c、vmstat等)
psutil.cpu_times()
scputimes(user=471.21, nice=104.58, system=276.85, idle=28935.3, iowait=391.02, irq=0.0, softirq=16.35, steal=0.0, guest=0.0, guest_nice=0.0
>>> psutil.cpu_times(percpu=True)
[scputimes(user=249.03, nice=61.25, system=156.09, idle=20729.97, iowait=195.16, irq=0.0, softirq=7.25, steal=0.0, guest=0.0, guest_nice=0.0),
scputimes(user=231.55, nice=43.33, system=140.27, idle=20633.5, iowait=196.1, irq=0.0, softirq=9.24, steal=0.0, guest=0.0, guest_nice=0.0)]
獲取單個數據,如用戶的cpu時間
>>> psutil.cpu_times().user
471.25
獲取cpu物理和邏輯個數,默認logical值為True
>>> psutil.cpu_count()
2
>>> psutil.cpu_count(logical=False)
2


6、內存信息
>>> mem = psutil.virtual_memory()
獲取內存完整信息
>>> mem
svmem(total=2082361344L, available=1130319872L, percent=45.7, used=1805217792L, free=277143552L, active=664281088, inactive=797175808, buffers=0L, cached=853176320)
獲取內存總數
>>> mem.total
2082361344L
獲取空閑存數
>>> mem.free
277143552L
獲取swap分區信息
>>> psutil.swap_memory()
sswap(total=2147479552L, used=8335360L, free=2139144192L, percent=0.4, sin=3416064, sout=11354112)


可以換算一下單位
>>> print (mem.total/8/1024)
127874
>>> print (mem.total/1024/1024)


其中percent表示實際已經使用的內存占比,即(2082361344-1130319872)/2082361344*100% 。available表示還可以使用的內存。


7、磁盤信息
磁盤信息主要有兩部分,一個是磁盤的利用率,一個是io,他們分別可以通過disk_usage和disk_io_counters方法獲取。
如下先獲取分區信息,然後看下根分區的使用情況。
獲取磁盤完整信息
>>> psutil.disk_partitions()
[sdiskpart(device=‘/dev/mapper/centos-root‘, mountpoint=‘/‘, fstype=‘xfs‘, opts=‘rw,seclabel,relatime,attr2,inode64,noquota‘),
sdiskpart(device=‘/dev/sda1‘, mountpoint=‘/boot‘, fstype=‘xfs‘, opts=‘rw,seclabel,relatime,attr2,inode64,noquota‘)]
獲取分區使用情況
>>> psutil.disk_usage(‘/‘)
sdiskusage(total=18746441728, used=5844000768, free=12902440960, percent=31.2)
獲取總的IO個數、讀寫信息
>>> psutil.disk_io_counters()
sdiskio(read_count=146151, write_count=203807, read_bytes=4112552448, write_bytes=11684216320, read_time=2269317, write_time=39627462)
perdisk=Ture獲取單個分區IO個數、讀寫信息
>>> psutil.disk_io_counters(perdisk=True)
{‘fd0‘: sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0),
‘sr0‘: sdiskio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_time=0, write_time=0),
‘sda2‘: sdiskio(read_count=71699, write_count=82805, read_bytes=2054048768, write_bytes=5806939648,
read_time=1124424, write_time=11573392), ‘sda1‘: sdiskio(read_count=1952, write_count=2255, read_bytes=5081600,
write_bytes=70337024, read_time=10686, write_time=27267), ‘dm-0‘: sdiskio(read_count=71452, write_count=115975,
read_bytes=2048183296, write_bytes=5795585536, read_time=1129014, write_time=25763350),
‘dm-1‘: sdiskio(read_count=1048, write_count=2772, read_bytes=5238784, write_bytes=11354112, read_time=5193, write_time=2263453)}

8、網絡信息
獲得網絡總的IO信息,默認pernic=False
>>> psutil.net_io_counters()
snetio(bytes_sent=17640593, bytes_recv=837836495, packets_sent=227041, packets_recv=594110, errin=0, errout=0, dropin=0, dropout=0)
pernic=True輸出每個網絡接口的IO信息
>>> psutil.net_io_counters(pernic=True)
{‘eno16777736‘: snetio(bytes_sent=17641429, bytes_recv=837839462, packets_sent=227046, packets_recv=594142, errin=0, errout=0, dropin=0, dropout=0),
‘virbr0‘: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0),
‘virbr0-nic‘: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0),
‘lo‘: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0)}

9、其他系統信息
查看當前登錄用戶
>>> psutil.users()
[suser(name=‘wolf‘, terminal=‘:0‘, host=‘localhost‘, started=1477147392.0),
suser(name=‘wolf‘, terminal=‘pts/0‘, host=‘localhost‘, started=1477147520.0),
suser(name=‘wolf‘, terminal=‘pts/4‘, host=‘192.168.3.26‘, started=1477190016.0),
suser(name=‘wolf‘, terminal=‘pts/6‘, host=‘192.168.3.26‘, started=1477190144.0)]
>>> import psutil, datetime
查看時間(linux格式時間戳)
>>> psutil.boot_time()
1477177417.0
linux時間戳轉換成自然時間格式
>>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
‘2016-10-23 07:03:37‘


10、系統進程管理
列出所有進程PID
>>> psutil.pids()
[[1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, ....]
實例化一個process對象,參數為一進程PID
>>> p=psutil.Process(1)
進程名
>>> p.name()
‘systemd‘
>>> p=psutil.Process(76242)
>>> p.name()
‘pickup‘
進程bin路徑
>>> p.exe()
‘/usr/libexec/postfix/pickup‘
進程工種目錄絕對路徑
>>> p.cwd()
‘/var/spool/postfix‘
進程狀態
>>> p.status()
‘sleeping‘
進程創建時間
>>> p.create_time()
1477208086.18
進程uid
>>> p.uids()
puids(real=89, effective=89, saved=89)
進程gid
>>> p.gids()
pgids(real=89, effective=89, saved=89)
進程cpu時間信息,包括user、system兩個cpu時間
>>> p.cpu_times()
pcputimes(user=0.02, system=0.02)
get進程CPU親和度,如果設置進程CPU親和度,將CPU號作為時間參數即可
>>> p.cpu_affinity()
[0, 1]
進程內存利用率
>>> p.memory_percent()
0.19276577581340273
進程內存css,vms信息
>>> p.memory_info()
pmem(rss=4014080, vms=95567872)
進程IO信息,包括讀寫IO數及字節數
>>> p.io_counters()
pio(read_count=149, write_count=160, read_bytes=0, write_bytes=0)
返回打開進程socker的namedutples列表,包含fs、family、laddr等信息
>>> p.connections()
[]
進程開啟的線程數
>>> p.num_threads()
1


popen類作用:獲取用戶啟動的應用程序進程信息,以便跟蹤程序進程的運行狀態。
>>> from subprocess import PIPE
通過psutil的Popen方法啟動的應用程序,可以跟蹤該程序的所有相關信息
>>> p = psutil.Popen(["/usr/bin/python","-c","print(‘hello‘)"],stdout=PIPE)
>>> p.name()
‘python‘
>>> p.username()
‘root‘
>>> p.communicate()
(‘hello\n‘, None)
>>> psutil.cpu_times()
scputimes(user=499.47, nice=104.58, system=335.63, idle=69964.99, iowait=391.57, irq=0.0, softirq=16.75, steal=0.0, guest=0.0, guest_nice=0.0)




Python對Linux系統的操作模塊