psutil is a cross-platform library for retrieving information onrunning processes and system utilization (CPU, memory, disks, network)in Python.
Project description
Quick links
Summary
psutil (python system and process utilities) is a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, disks, network) in Python. It is useful mainly for system monitoring, profiling and limiting process resources and management of running processes. It implements many functionalities offered by command line tools such as: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap. It currently supports Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures, with Python versions from 2.6 to 3.5 (users of Python 2.4 and 2.5 may use 2.1.3 version). PyPy is also known to work.
Example applications
See also:
Example usages
CPU
>>> import psutil
>>> psutil.cpu_times()
scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0)
>>>
>>> for x in range(3):
... psutil.cpu_percent(interval=1)
...
4.0
5.9
3.8
>>>
>>> for x in range(3):
... psutil.cpu_percent(interval=1, percpu=True)
...
[4.0, 6.9, 3.7, 9.2]
[7.0, 8.5, 2.4, 2.1]
[1.2, 9.0, 9.9, 7.2]
>>>
>>>
>>> for x in range(3):
... psutil.cpu_times_percent(interval=1, percpu=False)
...
scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
>>>
>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)
2
>>>
Memory
>>> psutil.virtual_memory()
svmem(total=8374149120, available=2081050624, percent=75.1, used=8074080256, free=300068864, active=3294920704, inactive=1361616896, buffers=529895424, cached=1251086336)
>>> psutil.swap_memory()
sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)
>>>
Disks
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),
sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext, opts='rw')]
>>>
>>> psutil.disk_usage('/')
sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
>>>
>>> psutil.disk_io_counters(perdisk=False)
sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568)
>>>
Network
>>> psutil.net_io_counters(pernic=True)
{'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),
'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}
>>>
>>> psutil.net_connections()
[pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED', pid=1254),
pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING', pid=2987),
pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED', pid=None),
pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT', pid=None)
...]
>>>
>>> psutil.net_if_addrs()
{'lo': [snic(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),
snic(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
snic(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],
'wlan0': [snic(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
snic(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
snic(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
>>>
>>> psutil.net_if_stats()
{'eth0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500),
'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536)}
Other system info
>>> psutil.users()
[user(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0),
user(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0)]
>>>
>>> psutil.boot_time()
1365519115.0
>>>
Process management
>>> import psutil
>>> psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245,
4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358,
4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235,
5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
>>>
>>> p = psutil.Process(7055)
>>> p.name()
'python'
>>> p.exe()
'/usr/bin/python'
>>> p.cwd()
'/home/giampaolo'
>>> p.cmdline()
['/usr/bin/python', 'main.py']
>>>
>>> p.status()
'running'
>>> p.username()
'giampaolo'
>>> p.create_time()
1267551141.5019531
>>> p.terminal()
'/dev/pts/0'
>>>
>>> p.uids()
puids(real=1000, effective=1000, saved=1000)
>>> p.gids()
pgids(real=1000, effective=1000, saved=1000)
>>>
>>> p.cpu_times()
pcputimes(user=1.02, system=0.31)
>>> p.cpu_percent(interval=1.0)
12.1
>>> p.cpu_affinity()
[0, 1, 2, 3]
>>> p.cpu_affinity([0]) # set
>>>
>>> p.memory_percent()
0.63423
>>>
>>> p.memory_info()
pmem(rss=7471104, vms=68513792)
>>> p.memory_info_ex()
extmem(rss=9662464, vms=49192960, shared=3612672, text=2564096, lib=0, data=5754880, dirty=0)
>>> p.memory_maps()
[pmmap_grouped(path='/lib/x86_64-linux-gnu/libutil-2.15.so', rss=16384, anonymous=8192, swap=0),
pmmap_grouped(path='/lib/x86_64-linux-gnu/libc-2.15.so', rss=6384, anonymous=15, swap=0),
pmmap_grouped(path='/lib/x86_64-linux-gnu/libcrypto.so.1.0.0', rss=34124, anonymous=1245, swap=0),
pmmap_grouped(path='[heap]', rss=54653, anonymous=8192, swap=0),
pmmap_grouped(path='[stack]', rss=1542, anonymous=166, swap=0),
...]
>>>
>>> p.io_counters()
pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632)
>>>
>>> p.open_files()
[popenfile(path='/home/giampaolo/svn/psutil/somefile', fd=3)]
>>>
>>> p.connections()
[pconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED'),
pconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING'),
pconn(fd=119, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED'),
pconn(fd=123, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT')]
>>>
>>> p.num_threads()
4
>>> p.num_fds()
8
>>> p.threads()
[pthread(id=5234, user_time=22.5, system_time=9.2891),
pthread(id=5235, user_time=0.0, system_time=0.0),
pthread(id=5236, user_time=0.0, system_time=0.0),
pthread(id=5237, user_time=0.0707, system_time=1.1)]
>>>
>>> p.num_ctx_switches()
pctxsw(voluntary=78, involuntary=19)
>>>
>>> p.nice()
0
>>> p.nice(10) # set
>>>
>>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)
>>> p.ionice()
pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0)
>>>
>>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)
>>> p.rlimit(psutil.RLIMIT_NOFILE)
(5, 5)
>>>
>>> p.suspend()
>>> p.resume()
>>>
>>> p.terminate()
>>> p.wait(timeout=3)
0
>>>
>>> psutil.test()
USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND
root 1 0.0 0.0 24584 2240 Jun17 00:00 init
root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd
root 3 0.0 0.0 0 0 Jun17 00:05 ksoftirqd/0
...
giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4
giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome
root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1
>>>
Further process APIs
>>> for p in psutil.process_iter():
... print(p)
...
psutil.Process(pid=1, name='init')
psutil.Process(pid=2, name='kthreadd')
psutil.Process(pid=3, name='ksoftirqd/0')
...
>>>
>>> def on_terminate(proc):
... print("process {} terminated".format(proc))
...
>>> # waits for multiple processes to terminate
>>> gone, alive = psutil.wait_procs(procs_list, 3, callback=on_terminate)
>>>
Donate
A lot of time and effort went into making psutil as it is right now. If you feel psutil is useful to you or your business and want to support its future development please consider donating me (Giampaolo Rodola’) some money. I only ask for a small donation, but of course I appreciate any amount.
Don’t want to donate money? Then maybe you could write me a recommendation on Linkedin.
Mailing list
Timeline
2016-01-15: psutil-3.4.1.tar.gz
2015-11-25: psutil-3.3.0.tar.gz
2015-10-04: psutil-3.2.2.tar.gz
2015-09-03: psutil-3.2.1.tar.gz
2015-09-02: psutil-3.2.0.tar.gz
2015-07-15: psutil-3.1.1.tar.gz
2015-07-15: psutil-3.1.0.tar.gz
2015-06-18: psutil-3.0.1.tar.gz
2015-06-13: psutil-3.0.0.tar.gz
2015-02-02: psutil-2.2.1.tar.gz
2015-01-06: psutil-2.2.0.tar.gz
2014-09-26: psutil-2.1.3.tar.gz
2014-09-21: psutil-2.1.2.tar.gz
2014-04-30: psutil-2.1.1.tar.gz
2014-04-08: psutil-2.1.0.tar.gz
2014-03-10: psutil-2.0.0.tar.gz
2013-11-25: psutil-1.2.1.tar.gz
2013-11-20: psutil-1.2.0.tar.gz
2013-11-07: psutil-1.1.3.tar.gz
2013-10-22: psutil-1.1.2.tar.gz
2013-10-08: psutil-1.1.1.tar.gz
2013-09-28: psutil-1.1.0.tar.gz
2013-07-12: psutil-1.0.1.tar.gz
2013-07-10: psutil-1.0.0.tar.gz
2013-05-03: psutil-0.7.1.tar.gz
2013-04-12: psutil-0.7.0.tar.gz
2012-08-16: psutil-0.6.1.tar.gz
2012-08-13: psutil-0.6.0.tar.gz
2012-06-29: psutil-0.5.1.tar.gz
2012-06-27: psutil-0.5.0.tar.gz
2011-12-14: psutil-0.4.1.tar.gz
2011-10-29: psutil-0.4.0.tar.gz
2011-07-08: psutil-0.3.0.tar.gz
2011-03-20: psutil-0.2.1.tar.gz
2010-11-13: psutil-0.2.0.tar.gz
2010-03-02: psutil-0.1.3.tar.gz
2009-05-06: psutil-0.1.2.tar.gz
2009-03-06: psutil-0.1.1.tar.gz
2009-01-27: psutil-0.1.0.tar.gz
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for psutil-3.4.1.win-amd64-py3.5.exe
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ee8641803d68a2e48952951336f9474a8914854da088fca673d67a91da7f9a4 |
|
MD5 | 3b7ce0cf5e99d01afcd74c765d70615b |
|
BLAKE2b-256 | 4354f2d3b8845105fe5f55d5f0fde36773ab94fe1e35a0f4a5219adc818d586b |
Hashes for psutil-3.4.1.win-amd64-py3.4.exe
Algorithm | Hash digest | |
---|---|---|
SHA256 | 66a243c4b9ad93059be391a18e3f75e015ad70b220df4f7f30f9f578b89f27ad |
|
MD5 | 643f7598264ae8d5bbb5548c3af0d02e |
|
BLAKE2b-256 | 256354f2ba7cf31bb936b9c2cd7a77fd40a698fb232cd7c95c1ce997295a5954 |
Hashes for psutil-3.4.1.win-amd64-py3.3.exe
Algorithm | Hash digest | |
---|---|---|
SHA256 | d03b8d081a281ebaa2122f259f7c0b3a464b2b98a3c221b9a54bfb0840355a9f |
|
MD5 | 661a17463eb07b18277949920f13f521 |
|
BLAKE2b-256 | 4c26695fa5b3578248f424d9a8e5bf2aafc6f706aeb7ec21ee31a5ebc2f79660 |
Hashes for psutil-3.4.1.win-amd64-py2.7.exe
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3c08e2c200b222a92a4ecaa8055a48e27e7cfe82d9bf6402b52dd82413a786ed |
|
MD5 | abe857be9730c9a1e3f58e9c18484019 |
|
BLAKE2b-256 | 669b2b58fdab300e5f2a20c3999c485692cfa73cc9d4e50770a19cc871f92743 |
Hashes for psutil-3.4.1.win-amd64-py2.6.exe
Algorithm | Hash digest | |
---|---|---|
SHA256 | e88e43423af984d7f2ecf8babf9d861ff59436794b0fdd2f85e9ea6bf7af6627 |
|
MD5 | a49f9c406e7323bfac904161c419f55c |
|
BLAKE2b-256 | f79053adfe2804c9cde062eb5014d88f0d067690fe1457ad2f49a2a553767689 |
Hashes for psutil-3.4.1-cp35-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 820ed01d84ffcda1c613be80c09318d7560dd3505299c65bb99f101963bfc3dd |
|
MD5 | 74c1153652f72b059929d294f882346c |
|
BLAKE2b-256 | f0f6ccf16168a627d10ffbd80120cd2c521c4c9ecdb4545e402b7deca79f93ac |
Hashes for psutil-3.4.1-cp35-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d3b2df184a31646a7e66cc48304f900a82c18ab3dc69d2d5f693ea97fca0572 |
|
MD5 | d6699401e2b8678a3d84cf256d5696cf |
|
BLAKE2b-256 | c9576e65ff27fa567cd9a7bfbc0a435e33293451b80865bc3a3a7b13c9bf7799 |
Hashes for psutil-3.4.1-cp34-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c3e1146003df43aec9274be4741371a06896d70d7d590eb882ad59de2c06120 |
|
MD5 | 9b65eb4042c3cec756e4759d2b3f8d24 |
|
BLAKE2b-256 | 3006cf0559d12ca5ded37e6a32b1671be57fad3bade7f24536b943851aa6393e |
Hashes for psutil-3.4.1-cp34-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e658cd0e0ad7a2971b2eeb6ee4b1a0ad14245003ea47425846bc8c3e892fd567 |
|
MD5 | befc938c8f9e796e09606f6c3b0698ec |
|
BLAKE2b-256 | b6cd59a87e4f10181ee228c4edc7d4927e3d62f652cff9f25f95a7e7e9ab3df0 |
Hashes for psutil-3.4.1-cp33-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e52230373076d0ecdb4aec373afd342c576ab52e11c382e058ed0188181a352 |
|
MD5 | 7ea441315caa1495e171ee68cea34269 |
|
BLAKE2b-256 | b084a9edadc49ef3dbb89298855ae069b18ec534ca9f79a9294de417b8e46571 |
Hashes for psutil-3.4.1-cp33-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08f4ab9b720310890fa9337321a6e1e8aa525538636526be77e82653588df46b |
|
MD5 | a9735586429eb353616edd4180c8a4ba |
|
BLAKE2b-256 | 6522f7121341bc75bff65000ecc0c5aad4f2a6d129506c26d5533ade2ca67349 |
Hashes for psutil-3.4.1-cp27-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46d7429bae3703a0f2980c0299d4d49ada733c7ebd2cfa4e29fa3e31b5b16014 |
|
MD5 | 409128c99c739b783e6c2ba22a7ac21b |
|
BLAKE2b-256 | 13060104f224dd52bf9e3fb3ef14f6b6b93e9fac72f562842d54445af041f3f0 |
Hashes for psutil-3.4.1-cp27-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b8424eaa712fef7da41fc7f391b452e8991a641a54e49c4f46eb72ca2585577 |
|
MD5 | 62d1bc04ea38cc98d24370ed47ee285f |
|
BLAKE2b-256 | cd2d760f774b1325037ea4ef85972f45fc9dee417da33ba225b21a0a8e512f5d |
Hashes for psutil-3.4.1-cp26-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcf212a926e8cffd3bec2acaeb584bf59a536e569d404bd8ea306f1752fbfc41 |
|
MD5 | 27c7910efdfe1f28599f3471dae44e0d |
|
BLAKE2b-256 | 8538d9882d4e37f4b791bd949a1f45c620e0f2573bb4048eb16d59d469e97ec6 |
Hashes for psutil-3.4.1-cp26-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b1382db1cf76d53fb1d6e5619b5f3c86126e11a933b200c21ed4fa7fe5037aa |
|
MD5 | 9ba86608fdee848d54a047996864ed5b |
|
BLAKE2b-256 | 8aa46dfd46e45d06da1a4d42814dbbdcffe3a4fc7f9b655e1c2919ac960512c2 |