Les commandes Shell Linux depuis Python

J’utilise Debian 10 Buster et Python 3.7.3

Mon but ici est d’exécuter des commandes Shell Linux depuis un script Python et si nécessaire de récupérer le résultat d’une commande dans une variable.

Dans mon exemple de programme en Python, je récupère le PID d’un processus Linux (celui de LibreOffice) dans une variable, par la suite, j’utilise ce paramètre dans une commande Shell Linux kill pour tuer l’application.

Si vous avez des suggestions d’améliorations ou une autre façon de procéder, je suis à votre écoute, rien n’est figé dans le marbre.

Mon exemple :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
# Obtenir le pid de LibreOffice et arrêter l'application
import subprocess
import os
pid = os.popen("pidof soffice.bin").read() #Obtenir le pid de LibreOffice grâce à une commande du Shell Linux
if pid != '': #si le pid n'est pas vide
    print('Mon pid : ', pid) #Afficher le pid
    Commande = 'kill -9 '+ str(pid) #La commande du Shell Linux qui va pemettre d'arrêter l'application
    subprocess.Popen(['/bin/sh', '-c', Commande]) #on arrête l'application
else: #sinon - pas de pid
    print("Oops! Je n'ai pas trouvé LibreOffice")

C’est un exemple intéressant, mais en fait on peut arrêter une application sans disposer de son PID avec la commande pkill. Ce qui donne l’exemple qui suit :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
import subprocess
subprocess.Popen(['/bin/sh', '-c', "pkill office"]) #on arrête l'application LibreOffice

Ce que je trouve dommage, c’est que l’on ne teste pas au préalable si LibreOffice est effectivement lancé. Vous avez une idée pour améliorer cela ?

Gestion des processus sous Linux

Afficher les processus

Pour afficher les processus de l’utilisateur qui exécute la commande :

ps -u

Pour afficher les processus de tous les utilisateurs :

ps -au

Pour visualiser l’intégralité des processus du système en cour d’exécution :

ps -aux

Pour afficher tous les processus du système en les regroupant par enchaînement d’exécution :

ps -faux

Arrêter des processus

Pour mettre fin à un processus, on utilise la commande kill. Par exemple :

Kill 2776

Pour le PID 2776, à vous d’adapter ce paramètre.

Même exemple, en forçant l’arrêt d’un processus qui ne répond plus si nécessaire :

Kill -9 2776

La commande top vous permet d’afficher des informations en continu sur l’activité du système.

top

Cette capture vous montre le résultat d’une commande top. On voit les PID, utile pour les commandes kill. Pour quitter top on utilise [Ctrl]+[C].

Exemples d’outils du type TOP sous Linux pour le monitoring.

TOP 10 des outils tip TOP sous Linux !

https://www.linuxtricks.fr/news/10-logiciels-libres/231-top-10-des-outils-tip-top-sous-linux/

Glance

https://pypi.org/project/Glances/