I’m using sh to run git commands inside a Python script.
In [1]: from sh import git
In [2]: s = git("log", "-1", pretty="format:%h %s")
In [3]: print s
4f14a66 basic debug page
This seems to work as expected. However, using this in a Django template gives [?1h= 4f14a66 basic debug page[m [K[?1l>. I tried to see what characters were in this string using repr(), to no avail:
In [4]: print repr(s)
4f14a66 basic debug page
It turns out commands in sh return a RunningCommand that has a .stdout attribute:
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>'
How do I get "4f14a66 basic debug page" i.e. the string without the escapes? Running the command from Bash is fine:
$ git log -1 --pretty="format:%h %s"
4f14a66 basic debug page
s.stdoutin the REPL will not print it but display itsrepr(). Useprint s.stdoutto get what you are looking for.If you do not want any escape codes consider executing it using
subprocess.call()– with stdout not being a tty most programs do not output any escape sequences.