git show / log ohne Shell-Escape-Sequenzen, zur Verwendung mit Python sh
Ich benutze Pythons sh, um Git-Befehle zu schreiben. Zum Beispiel mache ich Dinge wie
import sh
git = sh.git.bake(_cwd='/some/dir/')
project_hash = git('rev-parse', 'HEAD').stdout.strip()
project_branch = git('rev-parse', '--abbrev-ref', 'HEAD').stdout.strip()
project_date = git('log', '-1', '--pretty=format:%ci').stdout.strip()
und dann schreibe ich die project_hash, project_branch und project_date in eine Datenbank, etc.
Das Problem ist, dass git manchmal Shell-Escape-Sequenzen zu seiner Ausgabe hinzufügt. Zum Beispiel,
print(repr(project_hash))
print(repr(project_branch))
print(repr(project_date))
führt zu
'e55595222076bd90b29e184b6ff6ad66ec8c3a03'
'master'
'\x1b[?1h\x1b=\r2012-03-26 01:07:40 -0500\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'
Die ersten beiden Zeichenfolgen sind kein Problem, aber die letzte, das Datum, hat Escape-Sequenzen.
Gibt es eine Möglichkeit, diese loszuwerden, z. git bitten, keine Escape-Sequenzen auszugeben?
Ich habe die Option "--no-color" mit dem Befehl git log ausprobiert. Das hat nicht geholfen.
Ich würde sie auch gerne in Python selbst entfernen, aber ich weiß nicht wie. Ich habe versucht am encode ('ascii') wo s die Datumszeichenfolge ist. Das machte keinen Unterschied.
Drucken Sie stdout in Python ohne Shell-Escape-Sequenzen adressiert das gleiche Problem. Die Empfehlung besteht darin, Pythons Subprozess anstelle von sh zu verwenden. Zum Beispiel könnte ich tun
project_date = subprocess.check_output(["git", "log", "-1", "--pretty=format:%ci"], cwd='/some/dir/')
und
print(repr(project_date))
gibt
'2012-03-26 01:07:40 -0500'
Das will ich natürlich. Wenn es jedoch möglich ist, würde ich es vorziehen, bei sh zu bleiben, und würde gerne wissen, ob ich die Escape-Sequenzen mit sh vermeiden kann.
Irgendwelche Vorschläge?