2009-08-10 6 views
0

J'utilise l'appel suivant pour l'exécution de la commande « aspell » sur certaines chaînes en Python:Vérifier si une commande produit sortie

r,w,e = popen2.popen3("echo " +str(m[i]) + " | aspell -l") 

Je veux tester le succès de la fonction regardant le fichier stdout objet r. S'il n'y a pas de sortie, la commande est réussie.

Quelle est la meilleure façon de tester cela en Python? Merci d'avance.

Répondre

2

Il est préférable d'utiliser le module subprocess de la bibliothèque Python standard, voir here - popen2 est ancien et n'est pas recommandé.

Quoi qu'il en soit, dans votre code, if r.read(1): est un moyen rapide de tester s'il y a du contenu dans r (si vous ne vous souciez pas de ce que ce contenu pourrait être spécifiquement).

+0

Merci pour la réponse. – Spac

+0

@Spac vous êtes les bienvenus, mais j'aime la réponse de Christopher - ce n'est pas une réponse directe à votre question, mais il peut être une meilleure architecture pour résoudre votre problème global. –

2

Pourquoi n'utilisez-vous pas aspell -a?

Vous pourriez utiliser un sous-processus comme indiqué par Alex, mais gardez le tuyau ouvert. Suivez the directions pour utiliser l'API pipe de aspell, et il devrait être très efficace. L'avantage est que vous n'aurez pas à vérifier une ligne vide. Vous pouvez toujours lire depuis stdout, sachant que vous obtiendrez une réponse. Cela prend soin de beaucoup de conditions de course problématiques.

+0

+1. Cela évite également les attaques potentielles par injection de shell si la chaîne collée sur la ligne de commande n'est pas nettoyée. Et évitez les problèmes liés à l'exécution de limites de longueur de ligne de commande maximales si la chaîne est longue. –

Questions connexes