Wenn von Bash-Skript Umwandlung in Python Sie zwei Möglichkeiten gehen kann:
Sie das Programm Anrufe übernehmen und nur den Looping/String-Verarbeitung ersetzen, z.B. wie folgt:
from subprocess import check_output
for line in check_output('git branch -r', shell=True).split("\n"):
line = line.strip()
# do your replaces here, etc. leaving that for an exercise for you
# run more `check_call` or `check_output` here
Sie tun es "den richtigen Weg" und verwenden ein z. a python git module. Das ist zunächst mehr Arbeit, aber langfristig vorteilhaft, wie Sie mehr aus den Box-Funktionen erhalten, und haben wenige Fehler als in Ihren „schnell gehackt zusammen Shell Anrufen“
Edit: Als Kommentator zu Recht vermuten läßt, Sie sollten versuchen, shell=True
zu vermeiden. In diesem Fall ist check_output(['git', 'branch', '-r'])
sicherlich besser, in anderen Fällen, wenn Sie wissen, dass das Python-Skript auf einem Linux-Systemen und unter einer bestimmten Shell (zB Bash) ausgeführt wird, dann shell=True
ermöglicht Ihnen den Zugriff auf Umgebungsvariablen unter angegeben .bashrc
, globbing, etc. Für eine detaillierte Diskussion siehe here.
Mögliche Duplikate von [Wie Bash-Befehl in Python-Skript ausführen?] (Http://StackOverflow.com/Questions/26236126/How-To-Run-Bash-Command-inside-Python-Script) – Priya
Es ist in der Tat möglich, Shell-Kommandozeilen aus Python heraus zu spawnen, aber dies ist ein [XY-Problem] (http://xyproduk.info/). Das willst du nicht machen. Mit diesem Code wäre eine bessere Frage etwas wie "Ich führe gerade folgendes in der Shell aus. Es funktioniert, aber könnte besser gemacht werden. Insbesondere muss ich etwas in Python implementieren, das die gleichen Ergebnisse erzeugt. Hier ist Mein Versuch, gefolgt von der Fehlermeldung, die ich bekomme, wenn ich es ausführe. "* – ghoti
Ein guter erster Schritt wäre, den Shell-Code zu vereinfachen, den Sie jetzt haben. Zum Beispiel 'git branch -r | grep "tags /" 'kann durch' git branch --list -r 'tags/*' 'ersetzt werden. Die Befehlsersetzung, die als Argument für 'git tag' verwendet wird, kann (wahrscheinlich) einfach durch' '{tag # * tags /}" 'ersetzt werden. – chepner