Le contenu de cet article est une introduction à la méthode au niveau du module de sous-processus en Python (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
subprocess.run()
Exécutez et attendez que l'instruction spécifiée par le paramètre args se termine, et renvoyez l'instance CompletedProcess.
Paramètres : (*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs). À l'exception de input, capture_output, timeout et check, les autres paramètres sont cohérents avec les paramètres du constructeur Popen.
capture_output : s'il est défini sur True, cela signifie rediriger stdout et stderr vers le tube, et plus aucun paramètre stderr ou stdout ne peut être transmis, sinon une exception sera levée.
Entrée : le paramètre d'entrée sera transmis à la méthode Popen.communicate() comme entrée standard du sous-processus et doit être une chaîne (les paramètres d'encodage ou d'erreur doivent être spécifiés, ou le texte est défini sur True) ou type d'octet. Les paramètres d'entrée Non-None ne peuvent pas être utilisés avec les paramètres stdin, sinon une exception sera levée et le paramètre stdin utilisé pour construire l'instance Popen sera spécifié comme subprocess.PIPE.
timeout : passé à la méthode Popen.communicate().
check : si défini sur True, une exception CalledProcessError sera levée si l'exécution du processus renvoie un code d'état non-0.
# 源码 def run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs): if input is not None: if 'stdin' in kwargs: raise ValueError('stdin and input arguments may not both be used.') kwargs['stdin'] = PIPE if capture_output: if ('stdout' in kwargs) or ('stderr' in kwargs): raise ValueError('stdout and stderr arguments may not be used ' 'with capture_output.') kwargs['stdout'] = PIPE kwargs['stderr'] = PIPE with Popen(*popenargs, **kwargs) as process: try: stdout, stderr = process.communicate(input, timeout=timeout) except TimeoutExpired: process.kill() stdout, stderr = process.communicate() raise TimeoutExpired(process.args, timeout, output=stdout, stderr=stderr) except: # Including KeyboardInterrupt, communicate handled that. process.kill() # We don't call process.wait() as .__exit__ does that for us. raise retcode = process.poll() if check and retcode: raise CalledProcessError(retcode, process.args, output=stdout, stderr=stderr) return CompletedProcess(process.args, retcode, stdout, stderr)
Avant python3.5, les trois méthodes call(), check_all() et checkoutput() constituaient l'API de haut niveau du module de sous-processus.
subprocess.call()
Exécutez et attendez que l'instruction spécifiée par le paramètre args se termine, et renvoyez le code d'état d'exécution (attribut returncode de l'instance Popen).
Paramètres : (*popenargs, timeout=Aucun, **kwargs). Fondamentalement identique aux paramètres du constructeur Popen, tous les paramètres, à l'exception du délai d'attente, seront transmis à l'interface Popen.
N'utilisez pas stdout=PIPE ou stderr=PIPE lors de l'appel de la fonction call(), car si le processus enfant génère suffisamment de sortie vers le canal pour remplir le tampon du canal du système d'exploitation, le processus enfant ne pourra pas lire données du tuyau.
# 源码 def call(*popenargs, timeout=None, **kwargs): with Popen(*popenargs, **kwargs) as p: try: return p.wait(timeout=timeout) except: p.kill() p.wait() raise
subprocess.check_call()
Exécutez et attendez que l'instruction spécifiée par le paramètre args se termine, renvoie un code d'état 0 ou lève une exception CalledProcessError, les attributs cmd et returncode de l'exception peut être visualisée et exécutée. Instructions exceptionnelles et codes d'état.
Paramètres : (*popenargs, **kwargs). Tous les paramètres sont passés à la fonction call().
Les notes sont les mêmes que call()
# 源码 def check_call(*popenargs, **kwargs): retcode = call(*popenargs, **kwargs) if retcode: cmd = kwargs.get("args") if cmd is None: cmd = popenargs[0] raise CalledProcessError(retcode, cmd) return 0
subprocess.check_output()
Exécutez et attendez que l'instruction spécifiée par le paramètre args se termine, et revenez sur la sortie standard (stdout de l'attribut d'instance CompletedProcess), le type par défaut est octet. Le codage d'octets peut dépendre de l'instruction exécutée. Le paramètre universal_newlines=True peut renvoyer une valeur de type chaîne.
Si le code d'état d'exécution est différent de 0, une exception CalledProcessError sera levée.
Paramètres : (*popenargs, timeout=Aucun, **kwargs). Tous les arguments sont transmis à la fonction run(), mais le passage explicite de input=None pour hériter du descripteur de fichier d'entrée standard du processus parent n'est pas pris en charge.
Pour capturer l'erreur standard dans la valeur de retour, définissez stderr=subprocess.STDOUT ; vous pouvez également rediriger l'erreur standard vers le canal stderr=subprocess.PIPE, accessible via l'attribut stderr de l'exception CalledProcessError.
# 源码 def check_output(*popenargs, timeout=None, **kwargs): if 'stdout' in kwargs: raise ValueError('stdout argument not allowed, it will be overridden.') if 'input' in kwargs and kwargs['input'] is None: # Explicitly passing input=None was previously equivalent to passing an # empty string. That is maintained here for backwards compatibility. kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b'' return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, **kwargs).stdout
Le module de sous-processus fournit également les fonctions associées du module de commandes dans la version python2.x.
subprocess.getstatusoutput(cmd)
appelle en fait la fonction check_output(), exécute l'instruction cmd de type chaîne dans le shell et renvoie un tuple sous la forme de (code de sortie, sortie), Output (Contient stderr et stdout) est une chaîne décodée à l'aide du codage local avec la nouvelle ligne de fin supprimée.
# 源码 try: data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) exitcode = 0 except CalledProcessError as ex: data = ex.output exitcode = ex.returncode if data[-1:] == '\n': data = data[:-1] return exitcode, data
subprocess.getoutput(cmd)
Similaire à getstatusoutput(), mais le résultat ne renvoie que la sortie.
Cet article est terminé ici. Pour un contenu plus passionnant, vous pouvez faire attention à la colonne Tutoriel vidéo Python sur le site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!