[PYTHON] Une note sur le sous-processus

Cet article est ancien. Mis à jour dans un autre article.

Ici. https://qiita.com/HidKamiya/items/e192a55371a2961ca8a4 Nous l'avons résumé plus largement, en nous concentrant sur subprocess.run () et subprocess.Popen (), qui ne sont pas abordés ici.

Commandes obsolètes

--os.system (cmd) #Exécuter la commande dans le sous-shell (similaire à sh -c "cmd" sur la ligne de commande) # Statut de sortie -. Spawn {lvpe} (mode, chemin / fichier) #chemin d'exécution. mode: os.P _ .. # l / v: argument de longueur fixe / variable, p: recherche dans la variable d'environnement PATH, e: reprise de l'environnement de processus actuel -.Popen (cmd, mode) #Communiquer aux processus externes (scripts, logiciels, etc.) Lecture / écriture (mode: 'r', 'w') #pipe open? -. Exec {lvpe} (chemin / fichier) #process replacement --commands.getstatusoutput (cmd) # (état de fin, résultat) -. Getoutput (cmd) # Résultat

Aperçu

--subprocess.call (cmd) #End status -. Check_call (cmd) #End status mais Exception en cas d'erreur (CalledProcessError) -. Check_output (cmd) #Result mais Exception en cas d'erreur (CalledProcessError) -.Popen (cmd) # Spécifier le fichier en entrée / sortie

contenu de cmd: liste ou taple lors de la prise d'arguments

--cmd.strip (). split ("") Traitement familier. S'il y a inévitablement un espace, divisez-le. --shlex.split (cmd) S'il existe un groupement tel que "" dans la chaîne de caractères, ne le divisez pas par l'espace qu'il contient.

"ls -l" --> ['ls', '-l'] "echo'Hello world! '" -> [' Echo ',' Hello world! '] # Shlex.split (cmd) uniquement

option

--stdin: entrée standard --stdout: sortie standard --stderr: sortie d'erreur standard --Les valeurs spéciales suivantes

Valeur spéciale

--subprocess.DEVNULL: Spécifiez la destination d'entrée / sortie standard comme os.devnull (compartiment de bits, trou noir) --subprocess.PIPE: Spécifiez le tube vers la destination d'entrée / sortie standard --subprocess.STDOUT: Spécifiez que la sortie d'erreur standard est sortie vers le même handle que la sortie standard (uniquement pour 2> 1 & .stderr)

Intégration de sortie d'erreur


subprocess.check_output([cmd],stderr=subprocess.STDOUT)

subprocess.Popen.stdin/stdout/stderr

Obtenir une sortie via un tuyau


subprocess.Popen(cmd, stdout=subprocess.PIPE,shell=True).stdout.readlines()

subprocess.Popen.communicate()

communicate()Acquisition utilisant


subprocess.Popen([cmd], stdout=subprocess.PIPE).communicate()[0]

communicate()Entrée utilisant


subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE).communicate('Hello world!\n')[0]

communicate()Entrée 2 en utilisant


subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE).communicate(open('input.txt','r').read())[0]

Description qui n'utilise pas le shell dans le tuyau


p1 = subprocess.Popen([cmd1], stdout=subprocess.PIPE) #Diriger vers la destination de sortie
p2 = subprocess.Popen([cmd2], stdin=p1.stdout, stdout=subprocess.PIPE) #Recevoir p1 pour l'entrée
p1.stdout.close()
output = p2.communicate()[0] #stdout_obtenir des données

Autres options et valeurs par défaut

--bufsize = -1: réglage du tampon d'entrée / sortie (ligne). --executable = None: Spécifiez le programme de remplacement à exécuter. --preexec_fn = None: Appelez le fichier juste avant d'exécuter le processus enfant. #POSIX --close_fds = True: ferme les descripteurs de fichier autres que 0, 1, 2 avant d'exécuter le processus enfant. #POSIX --cwd = Aucun: répertoire de travail --env = None: définir les variables d'environnement dans le nouveau processus --universal_newlines = False: utilisez locale.getpreferredencoding (False) au lieu de locale.getpreferredencoding () --startupinfo = None: STARTUPINFO #Windows transmis à la fonction CreateProcess sous-jacente --creationflags = 0: CREATE_NEW_CONSOLE ou CREATE_NEW_PROCESS_GROUP #Windows --restore_signals = True: Stocke tous les signaux définis dans SIG_IGN dans SIG_DFL avant l'exécution du processus enfant --start_new_session = False: Créer un appel système setsid () dans le processus enfant avant d'exécuter le sous-processus #POSIX --pass_fds = (): descripteur de fichier à garder ouvert entre parent et enfant --encoding = None: nom d'encodage du fichier d'entrée / sortie standard --errors = None: gestion des erreurs lors de l'encodage

Recommended Posts

Une note sur le sous-processus
Une note sur mprotect (2)
Une note sur KornShell (ksh)
Une note sur TensorFlow Introduction
Une note sur [python] __debug__
Remarque à propos de get_scorer de sklearn
Une note sur mock (bibliothèque fictive Python)
Remarque sur awk
Juste une note
Un mémo que j'ai essayé le tutoriel Pyramid
Remarque sur les pointeurs (Go)
Un mémorandum sur Nan.
Écrire une note sur la version python de python virtualenv
Analyse de données en Python: une note sur line_profiler
Une note sur la nouvelle classe de base de style
Modificateurs de vérification des mémos avec MaxPlus
Envoyer un signal au sous-processus
Un mémorandum sur le simulacre de Python
Un peu plus sur le FIFO
Une petite note qui suit printf
Une note sur l'utilisation de l'API Facebook avec le SDK Python
Note
Une histoire rafraîchissante sur Slice en Python
Remarques lorsque gcloud est cassé
Une histoire de mauvaise humeur sur Slice en Python
J'ai une question sur les blancs
Note
Un petit exemple de note de list_head
Remarque sur la connexion de Spark à IBM Object Storage basé sur OpenStack Swift
Une note qui imprime joliment numpy.array
L'histoire de l'utilisation de la réduction de Python
En savoir plus sur le sous-processus (série 3, version mise à jour)
[Français] Une note sur le traitement parallèle structuré. Ou plutôt, la déclaration go semble être nuisible
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
Une note où un débutant Python s'est retrouvé coincé
[Note] Lire un fichier depuis un autre répertoire
Une histoire sur un remodelage magique qui met Lubuntu dans un Chromebook
J'ai touché "Orator" alors j'ai fait une note
Un programmeur Java a étudié Python. (À propos du type)
Mémorandum sur le QueryDict de Django
Remarques sur l'activation de PostgreSQL avec Django
Une histoire sur Python pop and append
Mémo sur Sphinx Partie 1 (Création d'un projet)
À propos du 02 février 2020 * Ceci est un article Python.
[Note] Une histoire sur l'impossibilité de percer le proxy avec pip