Wie kann ich 'git pull' von Python aus aufrufen?
Über die github-webhooks, ich möchte in der Lage sein, ziehen Sie alle änderungen an einem remote-Entwicklungs-server. In dem moment, wenn in dem entsprechenden Verzeichnis git pull
bekommt alle änderungen, die vorgenommen werden müssen. Allerdings kann ich nicht herausfinden, wie die zum aufrufen dieser Funktion aus Python. Ich habe versucht, die folgenden:
import subprocess
process = subprocess.Popen("git pull", stdout=subprocess.PIPE)
output = process.communicate()[0]
Aber diese Ergebnisse in der folgenden Fehlermeldung
Traceback (most recent call last): File "", line 1, in
Datei "/usr/lib/python2.7/subprocess.py", line 679, in
init
errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
erhöhen child_exception OSError: [Errno 2] No such file or directory
Gibt es eine Möglichkeit, dass ich nennen das bash-Befehl in Python?
git
ausführbare Datei im PFAD? InformationsquelleAutor der Frage djq | 2013-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie sich überlegt mit GitPython? Es ist entworfen, um all diesen Unsinn für Sie.
https://github.com/gitpython-developers/GitPython
InformationsquelleAutor der Antwort jleahy
Unterprozess.Popen
erwartet eine Liste der Programme, Namen und Argumente. Sie übergeben es einer einzelnen saite, die ist (mit der Standard -shell=False
) äquivalent zu:Das bedeutet, dass Unterprozess versucht zu finden ein Programm mit dem Namen wörtlich
git pull
, und nicht, dies zu tun: In Python 3.3, Ihr code löst die AusnahmeFileNotFoundError: [Errno 2] No such file or directory: 'git pull'
. Übergeben Sie stattdessen in einer Liste, wie diese:Durch die Art und Weise, in Python 2.7+, vereinfachen Sie diesen code mit der
check_output
Komfort-Funktion:Auch die Verwendung von git-Funktionalität, es ist nicht notwendig (wenn auch einfache und portable) zu nennen, das git-binary. Erwägen Sie die Verwendung git-python oder Dulwich.
InformationsquelleAutor der Antwort phihag
Dies ist ein Beispiel-Rezept, ich habe in einem meiner Projekte. Vereinbart, dass es mehrere Möglichkeiten, dies zu tun, obwohl. 🙂
Sich das problem mit dem code war, waren Sie nicht ein array übergeben, für
subprocess.Popen()
und somit war die versuchte Ausführung einer einzelnen Binärdatei namensgit pull
. Statt es ausführen, muss der binäregit
mit dem ersten argument wirdpull
und so weiter.InformationsquelleAutor der Antwort Tuxdude
Versuchen:
InformationsquelleAutor der Antwort orip