Cómo utilizar el módulo psutil para recuperar información de procesos y sistemas en dispositivos que ejecutan Junos OS
El psutil módulo Python está disponible en determinados dispositivos que admiten scripts de automatización de Python y que ejecutan Junos OS Evolved o Junos OS con FreeBSD actualizado. Puede utilizar el módulo en scripts de Python para recuperar información sobre los procesos en ejecución y la utilización del sistema en el psutil dispositivo, por ejemplo, información sobre la CPU, la memoria, los discos y los procesos. El módulo implementa la funcionalidad de muchas herramientas de línea de comandos como ps y uptime, entre otras.
En el cuadro 1 se describen las funciones soportadas psutil . Para obtener más información sobre el psutil módulo y sus funciones, consulte la documentación oficial en https://psutil.readthedocs.io/en/latest/.
| Categoría de función |
Funciones soportadas |
Funciones soportadas |
|---|---|---|
| CPU |
|
|
| Disco |
|
|
| Memoria |
|
|
| Red |
– |
|
| Procesos |
|
|
| Sensores |
– |
– |
| Información del sistema |
|
|
En la siguiente secuencia de comandos de operación de Python de ejemplo se muestran las llamadas a las psutil funciones para recuperar información sobre el sistema y los procesos en el dispositivo dado que ejecuta Junos OS:
import psutil
import datetime
### *** CPU FUNCTIONS ***
# Number of logical CPUs in the system
print ("psutil.cpu_count() = {0}".format(psutil.cpu_count()))
### *** DISK FUNCTIONS ***
# List of named tuples containing all mounted disk partitions
dparts = psutil.disk_partitions()
print("psutil.disk_partitions() = {0}".format(dparts))
# Disk usage statistics
du = psutil.disk_usage('/')
print("psutil.disk_usage('/') = {0}".format(du))
### *** MEMORY FUNCTIONS ***
# System memory usage statistics
mem = psutil.virtual_memory()
print("psutil.virtual_memory() = {0}".format(mem))
THRESHOLD = 100 * 1024 * 1024 # 100MB
if mem.available <= THRESHOLD:
print("warning, available memory below threshold")
### *** PROCESS FUNCTIONS ***
# List of current running process IDs.
pids = psutil.pids()
print("psutil.pids() = {0}".format(pids))
# Check whether the given PID exists in the current process list.
for proc in psutil.process_iter():
try:
pinfo = proc.as_dict(attrs=['pid', 'name'])
except psutil.NoSuchProcess:
pass
else:
print(pinfo)
### *** SYSTEM INFORMATION FUNCTIONS ***
# System boot time expressed in seconds since the epoch
boot_time = psutil.boot_time()
print("psutil.boot_time() = {0}".format(boot_time))
# System boot time converted to human readable format
print(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))
# Users currently connected on the system
users = psutil.users()
print("psutil.users() = {0}".format(users))
Cuando ejecuta el script op, el script imprime la información solicitada sobre el dispositivo. Parte de la salida de la muestra se ha truncado para mayor brevedad.
user@host> op psutil-test.py
psutil.cpu_count() = 4
psutil.disk_partitions() = [sdiskpart(device='/dev/md0.uzip', mountpoint='/', fstype='cd9660', opts='ro'), sdiskpart(device='devfs', mountpoint='/dev', fstype='devfs', opts='rw,multilabel'), ...]
psutil.disk_usage('/') = sdiskusage(total=20609945600L, used=12531843072L, free=6429306880L, percent=66.099999999999994)
psutil.virtual_memory() = svmem(total=4230012928L, available=7632039936L, percent=-80.400000000000006, used=658825216L, free=4325273600L, active=59793408L, inactive=3306766336L, buffers=289771520L, cached=0L, shared=249659392L, wired=599031808L)
psutil.pids() = [43521, 43134, 33616, 33610, 33609, 33608, 33605, 33604, 33603, 33602, 33599, 33598, 33597, 33596, 33593, 8356, 7893, 7871, 7870, 7869, 7868, 7867, 7866, 7865, 7864, 7863, 7862, 7861, 7860, 7859, 7858, 7857, 7856, 7854, 7853, 7851, 7850, 7849, 7848, 7847, 7846, 7845, 7844, 7842, 7841, 7840, 7839, 7838, 7837, 7836, 7835, 7834, 7833, 7832, 7831, 7830, 7829, 7828, 7826, 7825, 7824, 7823, 7822, 7821, 7820, 7819, 7817, 7807, 7627, 7560, 7410, 7370, 7362, 7359, 7345, 7344, 7343, 7342, 7340, 7336, 7335, 7328, 7327, 7322, 7320, 7319, 7318, 7314, 7313, 7312, 7308, 7307, 7304, 7303, 7301, 7299, 7296, 7295, 7293, 7282, 7267, 7266, 7262, 6278, 6276, 6275, 5886, 5493, 5492, 4015, 4014, 3954, 3953, 3895, 3894, 3835, 3834, 3776, 3775, 3717, 3716, 3660, 3659, 3601, 3600, 3541, 3540, 3481, 3480, 3423, 3422, 3364, 3363, 3304, 3303, 3160, 3159, 3091, 3090, 3032, 3031, 2973, 2972, 2916, 2915, 2857, 2856, 2798, 2797, 2707, 2650, 2649, 2591, 2590, 2532, 2531, 2464, 2463, 2407, 2406, 2348, 2347, 2289, 2220, 2219, 2161, 2160, 2102, 2101, 2043, 2042, 1984, 1983, 1925, 1924, 1865, 1782, 1781, 1671, 1670, 1564, 1563, 1089, 1088, 1032, 1031, 973, 972, 916, 915, 859, 858, 803, 802, 483, 482, 164, 163, 54, 53, 52, 51, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 9, 8, 7, 6, 5, 4, 3, 2, 11, 1, 10, 0]
{'pid': 0, 'name': 'kernel'}
{'pid': 1, 'name': 'init'}
{...}
psutil.boot_time() = 1570456872.0
2019-10-07 07:01:12
psutil.users() = [suser(name='user', terminal='pts/0', host='198.51.100.1', started=1570552539.0)]