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.

Какие-либо предложения?

Ответы на вопрос(2)

Ваш ответ на вопрос