[Python] Exécuter la commande unix (sous-processus)

Réglage

environnement: OSX Yosemite Bash Python3.5.0

Je veux obtenir la sortie d'une commande Unix sur Python.

Commandes Unix

Mac OS X est basé sur UNIX, je vais donc l'utiliser. (ls, toucher, chat, etc.)

os.system Bibliothèque standard ʻos` Je peux également utiliser la commande Unix ici, mais je ne peux pas obtenir la valeur de retour sous forme de chaîne. (Peut-être que vous pouvez l'obtenir, mais je ne sais pas) (Sortie uniquement vers le terminal) Normalement, s'il s'agit d'un système d'exploitation de fichiers de commandes telles que le toucher, cela suffit. S'il s'agit d'une commande telle que cat ou grep, elle ne peut pas être obtenue sous forme de chaîne de caractères.

subprocess Cliquez ici pour le lien de référence 17.5. Subprocess - Gestion des sous-processus Utilisez subprocess.check_output ici. Comme utilisation, vous mettez une chaîne de caractères dans l'argument, mais il y a deux façons, d'abord, si vous l'utilisez par défaut, check_output(["cut", "-d", "test.txt"]) ça ira. L'autre est d'utiliser shell = True comme argument afin qu'il puisse être exécuté en passant une chaîne de caractères. check_output("cut -d test.txt", shell=True) Pour plus de détails, il est écrit dans l'URL référencée comme suit.

Sous Unix avec shell = False (par défaut): Dans ce cas, la classe Popen utilise os.execvp () pour exécuter le programme enfant. Si une chaîne est donnée en argument, elle sera utilisée comme nom ou chemin du programme à exécuter; cependant, le programme ne fonctionnera que sans argument.

Pour Unix avec shell = True: si args est une chaîne, spécifiez la chaîne de ligne de commande à exécuter via le shell. La chaîne doit correspondre exactement au format que vous tapez à l'invite du shell. Par exemple, si vous avez un nom de fichier qui contient des espaces dans la chaîne, vous devez citer ou échapper une barre oblique inverse. Si args est une chaîne, le premier élément est passé au shell sous forme de chaîne représentant le nom de la commande et les éléments restants comme arguments suivants. Ceci est équivalent à Popen ci-dessous.

Échantillon simple

Il s'agit d'un exemple (cut -d, -f2) qui crée un fichier de manière appropriée et acquiert la deuxième colonne. Puisqu'il s'agit d'un système à 3, la valeur sera renvoyée en octets. (Il semble y avoir une option (argument de mot-clé) qui renvoie str) Dans le cas de 3 séries, puisque les octets retournés sont des octets, c'est à la fin du code, mais si ʻuniversal_newlines = True` est ajouté, il sera retourné comme str.

subprocess_test.py


>>> open("test.txt", 'w').write('\n'.join(([repr([i, i+1, i+2]).replace(' ', '') for i in range(5)])))
39
>>> open("test.txt").read()
'[0,1,2]\n[1,2,3]\n[2,3,4]\n[3,4,5]\n[4,5,6]'
>>>
>>> import subprocess
>>> subprocess.check_output(["cut", "-d,", "-f2", "test.txt"])
b'1\n2\n3\n4\n5\n'
>>> subprocess.check_output("cut -d, -f2 test.txt", shell=True)
b'1\n2\n3\n4\n5\n'
>>> subprocess.check_output("cut -d, -f2 test.txt", shell=True, universal_newlines=True)
'1\n2\n3\n4\n5\n'

Résumé

Généralement, il est plus rapide d'écrire ShellScript, mais pour référence, j'ai écrit comment exécuter des commandes Unix en Python.

Recommended Posts

[Python] Exécuter la commande unix (sous-processus)
Exécuter des commandes depuis Python
Exécuter la commande depuis Python
Exécuter des commandes externes avec python
Exécutez la commande unix sur python
Comment exécuter une commande à l'aide d'un sous-processus en Python
Charger et exécuter la commande depuis yml avec python
Exécuter automatiquement le fichier python
classe de wrapper de sous-processus python
Notes de commande de base Python
Exécution de commandes externes en Python
Lorsque vous souhaitez lancer une commande UNIX sur Python
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
Exécuter le script Python à partir du fichier de commandes
Traitement des arguments de ligne de commande (docopt Python)
Appuyez sur une commande en Python (Windows)
Exécutez l'instruction [python] exec, eval
[Mémo personnel] Mémo de commande d'environnement virtuel Python
Dans la commande python, python pointe vers python3.8
Commande d'acquisition d'horodatage dans l'environnement Unix
Demandez à python de lire la sortie de la commande
Exécuter du code Python à partir de l'interface graphique C #
Exécuter le script Python pendant CodeSys # RunTime
Exécution parallèle facile avec le sous-processus python
Commande pour le répertoire courant Python