environnement: OSX Yosemite Bash Python3.5.0
Je veux obtenir la sortie d'une commande Unix sur Python.
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.
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'
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