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 № 1Je reçois cette erreur chaque fois que j'utilise svn log | head
aussi, 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.