Drucken Sie stdout in Python ohne Shell-Escape-Sequenzen

Ich benutzesh git-Befehle in einem Python-Skript ausführen.

In [1]: from sh import git

In [2]: s = git("log", "-1", pretty="format:%h %s")

In [3]: print s
4f14a66 basic debug page

Dies scheint wie erwartet zu funktionieren. Wenn Sie dies jedoch in einer Django-Vorlage verwenden, erhalten Sie[?1h= 4f14a66 basic debug page[m [K[?1l>. Ich habe versucht zu sehen, welche Zeichen in dieser Zeichenfolge enthalten sindrepr(), umsonst:

In [4]: print repr(s)
4f14a66 basic debug page

Es stellt sich heraus, Befehle insh zurück aRunningCommand das hat a.stdout Attribut:

In [5]: type(s)
Out[5]: sh.RunningCommand

In [7]: s.stdout
Out[7]: '\x1b[?1h\x1b=\r4f14a66 basic debug page\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'

Wie bekomme ich"4f14a66 basic debug page" d.h. die Zeichenfolge ohne die Fluchten? Das Ausführen des Befehls von Bash aus ist in Ordnung:

$ git log -1 --pretty="format:%h %s"
4f14a66 basic debug page

Antworten auf die Frage(2)

Ihre Antwort auf die Frage