Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python

introduction

Si vous voulez gérer les commandes shell en Python, vous utilisez généralement le module subprocess. Il est possible de passer le résultat sous forme de liste en utilisant stdout.readlines () dans le module, mais si la commande shell à exécuter s'étend sur plusieurs lignes, le code de saut de ligne (saut de ligne) sera passé ensemble. Par conséquent, afin de transmettre la liste avec le code de saut de ligne (saut de ligne) supprimé, le traitement suivant doit être effectué.

Ici, nous allons expliquer en utilisant un exemple d'exécution de ls -l à partir de Python en tant que commande shell.

Cette fois, j'ai créé trois scripts selon les trois méthodes suivantes.

En fait, l'exemple de résultat lorsque ls -l est exécuté est le suivant.

$ ls -l
total 12
-rwxr-xr-x 1 root root 260 Jun 16 18:48 res_cmd_lfeed.py
-rwxr-xr-x 1 root root 378 Jun 16 18:49 res_cmd_no_lfeed.py
-rwxr-xr-x 1 root root 247 Jun 16 18:48 res_cmd.py

Pour obtenir le même résultat que l'exécution du shell

Obtenez le premier élément de tableau de communiquez ().

res_cmd.py


#!/usr/bin/python

import subprocess

def res_cmd(cmd):
  return subprocess.Popen(
      cmd, stdout=subprocess.PIPE,
      shell=True).communicate()[0]

def main():
  cmd = ("ls -l")
  print(res_cmd(cmd))

if __name__ == '__main__':
  main()

Comme indiqué ci-dessous, le résultat de l'exécution du script est le même que lorsque ls -l est exécuté.

$ ./res_cmd.py
total 12
-rwxr-xr-x 1 root root 260 Jun 16 18:48 res_cmd_lfeed.py
-rwxr-xr-x 1 root root 378 Jun 16 18:49 res_cmd_no_lfeed.py
-rwxr-xr-x 1 root root 247 Jun 16 18:48 res_cmd.py

Pour obtenir une liste avec saut de ligne

Utilisez stdout.readlines ().

res_cmd_lfeed.py


#!/usr/bin/python

import subprocess

def res_cmd_lfeed(cmd):
  return subprocess.Popen(
      cmd, stdout=subprocess.PIPE,
      shell=True).stdout.readlines()

def main():
  cmd = ("ls -l")
  print(res_cmd_lfeed(cmd))

if __name__ == '__main__':
  main()

Vous pouvez obtenir une liste de résultats incluant des sauts de ligne.

$ ./res_cmd_lfeed.py
['total 12\n', '-rwxr-xr-x 1 root root 261 Jun 16 18:52 res_cmd_lfeed.py\n', '-rwxr-xr-x 1 root root 380 Jun 16 18:52 res_cmd_no_lfeed.py\n', '-rwxr-xr-x 1 root root 248 Jun 16 18:51 res_cmd.py\n']

Pour obtenir une liste sans saut de ligne

Utilisez stdout.readlines () et utilisez `rstrip (" \ n ") ʻen notation d'inclusion de liste.

res_cmd_no_lfeed.py


#!/usr/bin/python

import subprocess

def res_cmd_lfeed(cmd):
  return subprocess.Popen(
      cmd, stdout=subprocess.PIPE,
      shell=True).stdout.readlines()

def res_cmd_no_lfeed(cmd):
  return [str(x).rstrip("\n") for x in res_cmd_lfeed(cmd)]

def main():
  cmd = ("ls -l")
  print(res_cmd_no_lfeed(cmd))

if __name__ == '__main__':
  main()

Vous pouvez obtenir une liste de résultats hors saut de ligne.

$ ./res_cmd_no_lfeed.py
['total 12', '-rwxr-xr-x 1 root root 261 Jun 16 18:52 res_cmd_lfeed.py', '-rwxr-xr-x 1 root root 380 Jun 16 18:52 res_cmd_no_lfeed.py', '-rwxr-xr-x 1 root root 248 Jun 16 18:51 res_cmd.py']

Recommended Posts

Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Comment obtenir une liste de fichiers dans le même répertoire avec python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment déterminer l'existence d'un élément sélénium en Python
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Comment effacer un taple dans une liste (Python)
Copiez la liste en Python
linux / c> lien> Obtenir le résultat de l'exécution de la commande shell dans le programme C> On m'a appris à utiliser popen ()
[Python] Comment mettre n'importe quel nombre d'entrées standard dans la liste
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Comment bien formater une liste de dictionnaires (ou d'instances) en Python
Comment obtenir le nombre de chiffres en Python
Comment écrire un type liste / dictionnaire de Python3
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Python] Comment afficher les valeurs de liste dans l'ordre
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
Dans la commande python, python pointe vers python3.8
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Mesurons le résultat de l'exécution du programme avec C ++, Java, Python.
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Comment utiliser la méthode __call__ dans la classe Python
Obtenez le nombre d'éléments spécifiques dans la liste python
Comment développer dans un environnement virtuel Python [Memo]
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Comment trouver le premier élément qui correspond aux critères de la liste Python
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Comment connaître la structure interne d'un objet en Python
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Afficher une liste d'alphabets en Python 3
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Python] Comment supprimer des lignes et des colonnes dans une table (liste des options de méthode de dépôt)
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Le résultat de l'installation de python sur Anaconda
Comment obtenir stacktrace en python
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Comment surveiller l'état d'exécution de sqlldr avec la commande pv
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
[Python / Tkinter] Comment passer des arguments à la commande
Résumé de l'utilisation de la liste Python
Comment mettre à jour la version Python de Cloud Shell dans GCP
Comment supprimer plusieurs positions (index) spécifiées dans une liste Python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Comment masquer l'invite de commande lors de l'exécution de python dans Visual Studio 2015
Comment envoyer une image visualisée des données créées en Python à Typetalk
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je souhaite trier une liste dans l'ordre des autres listes
Recevez une liste des résultats du traitement parallèle en Python avec starmap