git show / log без escape-последовательностей оболочки, для использования с python sh
Я использую python sh для написания команд git. Например, я делаю такие вещи, как
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()
а затем я записываю project_hash, project_branch и project_date в базу данных и т. д.
Проблема в том, что git иногда добавляет escape-последовательности оболочки к своему выводу. Например,
print(repr(project_hash))
print(repr(project_branch))
print(repr(project_date))
приводит к
'e55595222076bd90b29e184b6ff6ad66ec8c3a03'
'master'
'\x1b[?1h\x1b=\r2012-03-26 01:07:40 -0500\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'
Первые две строки не являются проблемой, но последняя, дата, имеет escape-последовательности.
Есть ли способ, которым я могу избавиться от них, например, просит git не выводить какие-либо escape-последовательности?
Я пробовал параметр --no-color с помощью команды git log. Это не помогло.
Я также был бы рад раздеть их в самом Python, но я не знаю как. Я пробовал s.encode ('ascii'), где s это строка даты. Это не имело значения.
Вывести стандартный вывод на Python без escape-последовательностей оболочки решает ту же проблему. Рекомендуется использовать подпроцесс python, а не sh. Например, я мог бы сделать
project_date = subprocess.check_output(["git", "log", "-1", "--pretty=format:%ci"], cwd='/some/dir/')
а также
print(repr(project_date))
дает
'2012-03-26 01:07:40 -0500'
Это то, что я хочу, конечно. Однако, если это возможно, я бы предпочел придерживаться sh, и поэтому хотел бы знать, могу ли я избежать escape-последовательностей, используя sh.
Какие-либо предложения?