Maison  >  Article  >  développement back-end  >  Comment exécuter des commandes externes de manière asynchrone à partir de Python

Comment exécuter des commandes externes de manière asynchrone à partir de Python

DDD
DDDoriginal
2024-10-22 20:46:26642parcourir

How to Execute External Commands Asynchronously from Python

Exécution asynchrone de commandes externes à partir de Python

Dans les scripts Python, il est souvent nécessaire d'invoquer des commandes externes qui peuvent prendre une quantité prolongée de le temps de terminer. Pour garantir que le script Python ne s'arrête pas pendant l'exécution de ces commandes, une exécution asynchrone est souhaitée. Les tentatives précédentes utilisant os.system() incluaient l'utilisation de & pour détacher la commande du flux du script, mais la pertinence de cette approche est discutable.

Une solution plus efficace est la fonction subprocess.Popen. Avec Popen, vous pouvez lancer une commande externe sans bloquer l'exécution du script Python. Prenons l'exemple suivant :

from subprocess import Popen
p = Popen(['watch', 'ls']) # something long running
# ... do other stuff while subprocess is running
p.terminate()

Cet extrait de code utilise Popen pour lancer une commande de longue durée (telle que « watch ls »). Le script Python peut alors continuer ses propres tâches pendant que la commande externe reste active. Le cas échéant, l'instance Popen peut être résiliée à l'aide de la méthode terminate().

De plus, Popen offre des fonctionnalités supplémentaires telles que l'interrogation du statut, l'envoi d'entrées via stdin et l'attente de la résiliation. En tirant parti de subprocess.Popen, vous pouvez intégrer de manière transparente l'exécution de commandes externes asynchrones dans vos scripts Python.

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