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.
--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
--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
--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
--stdin: entrée standard --stdout: sortie standard --stderr: sortie d'erreur standard --Les valeurs spéciales suivantes
--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
--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