/ / Erreur Python lors de l'utilisation de os.popen () - python, macos, svn, popen

Erreur Python lors de l'utilisation de os.popen () - python, macos, svn, popen

Eh bien, j’ai un script Python fonctionnant sous Mac OS X. Maintenant, je dois le modifier pour prendre en charge la mise à jour de ma copie de travail SVN dans un délai spécifié. Cependant, après avoir appris, j’ai constaté que les commandes SVN ne prennent en charge que la mise à jour de la copie de travail dans une version spécifiée.

J'écris donc une fonction pour grub l'information de la commande: svn log XXX, pour trouver la version correspondante à l'heure spécifiée. Voici ma solution:

process=os.popen("svn log XXX")
print process.readline()
print process.readline()
process.close()

Pour simplifier le problème, je viens d’imprimer les 2 premières lignes de la sortie. Cependant, lors de l'exécution du script, j'ai reçu le message d'erreur suivant: svn: Erreur d'écriture: canal cassé

Je pense que la raison pour laquelle j'ai reçu ce message est que la commande svn continuait de s'exécuter lorsque je fermais Popen. Donc, le message d'erreur survient.

Y a-t-il quelqu'un qui peut m'aider à résoudre le problème? Ou donnez-moi une solution alternative pour atteindre l'objectif. THX!

Réponses:

1 pour la réponse № 1

Je reçois cette erreur chaque fois que j'utilise svn log | headaussi, ce n'est pas spécifique à Python. Essayez quelque chose comme:

from subprocess import PIPE, Popen

process = Popen("svn log XXX", stdout=PIPE, stderr=PIPE)
print process.stdout.readline()
print process.stdout.readline()

supprimer le stderr. Vous pouvez aussi simplement utiliser

stdout, stderr = Popen("svn log XXX | head -n2", stdout=PIPE, stderr=PIPE, shell=True).communicate()
print stdout

1 pour la réponse № 2

S'il vous plaît utiliser pysvn. C'est assez facile à utiliser. Ou utilisez un sous-processus.

Avez-vous encore des erreurs si vous faites finalement:

print process.read()

Et il est préférable d'appeler wait () si vous utilisez os.popen ou un sous-processus.