Maison  >  Article  >  développement back-end  >  Comment puis-je utiliser un sous-processus pour exécuter des scripts Python, transmettre des entrées et capturer des sorties ?

Comment puis-je utiliser un sous-processus pour exécuter des scripts Python, transmettre des entrées et capturer des sorties ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 18:43:33720parcourir

How Can I Use Subprocess to Execute Python Scripts, Pass Input, and Capture Output?

Exploiter le sous-processus pour exécuter des scripts Python avec entrée et capturer la sortie

Lorsqu'il est chargé d'appeler un script Python à partir d'un autre script à l'aide du module de sous-processus, vous pouvez être confronté à l'obstacle de transmettre l'entrée et d'obtenir la sortie souhaitée dans une variable. Cet article examinera les solutions à ces défis, vous permettant d'exploiter efficacement la puissance des sous-processus.

Pour préparer le terrain, envisagez un scénario dans lequel vous disposez de deux scripts Python : a.py et b.py. Le script a.py invite l'utilisateur à effectuer certaines requêtes et génère une sortie au format JSON. B.py vise à appeler a.py, à fournir l'entrée nécessaire et à capturer la sortie.

La clé pour y parvenir réside dans l'exploitation de la méthode check_output du module de sous-processus. Cette méthode prend en entrée une liste de commandes comprenant l'exécutable Python et le chemin vers a.py. Il alimente l'entrée spécifiée (dans ce cas, une séquence de requêtes) dans a.py et capture sa sortie stdout sous forme de chaîne.

Voici un exemple d'extrait de code qui illustre cette approche :

<code class="python">import os
import sys
from subprocess import check_output

script_path = os.path.join(get_script_dir(), 'a.py')
output = check_output([sys.executable, script_path],
                      input='\n'.join(['query 1', 'query 2']),
                      universal_newlines=True)</code>

Vous pouvez également opter pour une approche plus flexible en important le module a depuis b.py et en appelant une fonction dans a.py. Cependant, il est crucial de s'assurer qu'a.py utilise un garde if __name__=="__main__" pour empêcher l'exécution de code indésirable lors de l'importation.

Si l'optimisation des performances est votre principale préoccupation, envisagez d'utiliser le multitraitement pour distribuer votre requêtes sur plusieurs processus. Cette approche est particulièrement bénéfique lorsque le traitement des requêtes est gourmand en CPU, car elle peut potentiellement améliorer le temps d'exécution.

L'extrait de code suivant illustre comment y parvenir :

<code class="python">from multiprocessing import freeze_support, Pool
import a

if __name__ == "__main__":
   freeze_support()
   pool = Pool() # use all available CPUs
   result = pool.map(a.search, ['query 1', 'query 2'])</code>

En maîtrisant ces techniques , vous serez bien équipé pour exécuter de manière transparente des scripts Python avec entrée, capturer leur sortie et exploiter la puissance des sous-processus pour vos besoins en matière de scripts.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn