[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats

Cette fois, je vais expliquer comment exécuter des commandes système en Python, ce que tout le monde aime, et produire les résultats. Cela s'appelle une commande système, mais c'est un moyen d'exécuter toutes les commandes pouvant être utilisées sur Terminal en Python.

Comment obtenir uniquement le téléchargement et le téléchargement à partir de Speedtest json en utilisant jq https://qiita.com/Bob_Alice/items/83c0686f56012b300780

Utiliser le "sous-processus" de la bibliothèque Python

Tout d'abord, vous pouvez facilement exécuter des commandes système en utilisant la bibliothèque Python "sous-processus".

C'est super facile à utiliser, en Python

result = subprocess.run(['commander','そのcommanderの引数'], stdout=subprocess.PIPE)

Puis

result.returncode

Contient le code d'état (succès ou échec) de la commande

result.stdout

Le résultat de la sortie standard est affecté à.

Que faire s'il y a plusieurs arguments

Lorsqu'il y a plusieurs arguments, il semble y avoir différentes manières, mais il semble y avoir un problème de sécurité. Cette fois, la commande à utiliser et son argument ont été décidés pour mon utilisation, j'ai donc créé un script shell pour l'exécuter. Les scripts shell ne sont pas difficiles, enregistrez simplement un fichier avec les commandes et arguments que vous souhaitez utiliser avec l'extension .sh. Cette fois, le but était d'exécuter la commande suivante qui génère une valeur spécifique à l'aide de la commande jq du fichier json préparé.

cat result.json | jq ".download.bandwidth"

Par conséquent, j'ai écrit cette commande dans un fichier appelé "get_download_bandwidth_from_result.sh" et l'ai sauvegardée.

Ensuite, il est devenu le code Python suivant.

import subprocess

result = subprocess.run(['sh','get_download_bandwidth_from_result.sh'], stdout=subprocess.PIPE)
print(result.returncode)
print(result.stdout)

Résultat de sortie

b'33052461\n'

Je dois décoder les caractères

Cependant, lorsque la sortie standard est reçue par un sous-processus, ce sera un octet codé. Vous devez le décoder pour lui donner un aspect normal.

En savoir plus sur le sous-processus (série 3, version mise à jour) https://qiita.com/HidKamiya/items/e192a55371a2961ca8a4

Donc

result.stdout.decode().strip().split('\n')

Ce faisant, j'ai pu prendre des décisions.

Cependant, comme le résultat du choix est stocké sous forme de liste, il est nécessaire de spécifier qu'il s'agit de la première (0ème) variable de la liste afin de la traiter comme une variable unique.

output = result.stdout.decode().strip().split('\n')[0]

Ce faisant, le premier nombre après le choix est entré dans la sortie variable.

Le résultat final est le code Python suivant.

import subprocess

result = subprocess.run(['sh','get_download_bandwidth_from_result.sh'], stdout=subprocess.PIPE)
print(result.returncode)
print(result.stdout)
print(result.stdout.decode().strip().split('\n'))

C'est parfait. La fin.

Postscript

Notez que subprocess.run () ne peut être utilisé qu'avec Python 3.5 ou version ultérieure https://ja.ojit.com/so/python/232121

Recommended Posts

[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats
Un moyen standard de développer et de distribuer des packages en Python
Comment exécuter des commandes et des scripts shell externes en python
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
Comment afficher les octets de la même manière en Java et Python
Une manière intelligente de chronométrer le traitement avec Python
Sortie sous la forme d'un tableau python
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment exécuter une commande à l'aide d'un sous-processus en Python
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
[Python] Comment afficher les valeurs de liste dans l'ordre
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression
Enregistrez le modèle pystan et les résultats dans un fichier pickle
Sortie "Dessiner fougère par programmation" dans le processus de dessin en Python
Comment utiliser la méthode __call__ dans la classe Python
Probablement le moyen le plus simple de créer un pdf avec Python 3
En Python, les éléments de la liste sont triés et sortis sous forme d'éléments et de multiples.
Un moyen simple d'éviter plusieurs boucles for en Python
Créer un environnement Python et transférer des données vers le serveur
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Introduction d'une bonne méthode de gestion des connexions DB en Python
Essayez simplement de recevoir un webhook avec ngrok et Python
Comment démarrer le PC à une heure fixe chaque matin et exécuter le programme python
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Recherche d'un moyen unifié d'attendre et d'obtenir les changements d'état de Selenium pour les éléments Python
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
Exporter la liste de clés incluse dans S3 Bucket dans un fichier
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Exécutez le code de sortie sur le serveur Web local en tant que "A, faisant semblant d'être B" en python
Comment déterminer l'existence d'un élément sélénium en Python
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Appuyez sur la commande echo dans le terminal Mac pour afficher Hello World
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Dans la commande python, python pointe vers python3.8
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
[Python] Le rôle de l'astérisque devant la variable. Divisez la valeur d'entrée et affectez-la à une variable
Exporter et exporter des fichiers en Python
[Python scraping] Affiche l'URL et le titre du site contenant un mot-clé spécifique dans un fichier texte
[Python / Jupyter] Traduisez le commentaire du programme copié dans le presse-papiers et insérez-le dans une nouvelle cellule.
Un moyen simple de saisir et d'exécuter des cas de test AtCoder dans Jupyter Notebook
[Introduction à Python] Quelle est la différence entre une liste et un taple?
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Comment obtenir la différence de date et d'heure en secondes avec Python
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Comment mettre un espace demi-largeur avant les lettres et les chiffres en Python.
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7
Connectez-vous à postgreSQL depuis Python et utilisez des procédures stockées dans une boucle.
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python