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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage