I'm using python's sh to script git commands. For example, I do things like
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()
and then I write the project_hash, project_branch and project_date into a database, etc.
The trouble is git sometimes adds shell escape sequences to its output. For example,
print(repr(project_hash))
print(repr(project_branch))
print(repr(project_date))
leads to
'e55595222076bd90b29e184b6ff6ad66ec8c3a03'
'master'
'x1b[?1hx1b=
2012-03-26 01:07:40 -0500x1b[m
x1b[Kx1b[?1lx1b>'
The first two strings are not a problem, but the last one, the date, has escape sequences.
Is there any way I can get rid of these, e.g. asking git not to output any escape sequences?
I have tried the "--no-color" option with the git log command. That did not help.
I would also be happy to strip them out in python itself, but I don't know how. I tried s.encode('ascii') where s is the date string. That did not make a difference.
Print stdout in Python without shell escape sequences addresses the same issue. The recommendation there is to use python's subprocess rather than sh. E.g., I could do
project_date = subprocess.check_output(["git", "log", "-1", "--pretty=format:%ci"], cwd='/some/dir/')
and
print(repr(project_date))
gives
'2012-03-26 01:07:40 -0500'
That is what I want, of course. However, if it is possible I would prefer to stick with sh, and so would like to know if I can avoid the escape sequences using sh.
Any suggestions?
See Question&Answers more detail:
os