Я использую sh
для запуска команд git внутри сценария Python.Печать stdout в Python без escape-последовательностей оболочки
In [1]: from sh import git
In [2]: s = git("log", "-1", pretty="format:%h %s")
In [3]: print s
4f14a66 basic debug page
Это похоже на работу, как ожидалось. Однако, используя это в шаблоне Django, вы получаете [?1h= 4f14a66 basic debug page[m [K[?1l>
. Я пытался увидеть, какие символы были в этой строке, используя repr()
, но безрезультатно:
In [4]: print repr(s)
4f14a66 basic debug page
Оказывается, команды в sh
возвращения в RunningCommand
, который имеет .stdout
атрибут:
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>'
Как я могу получить "4f14a66 basic debug page"
т.е. строка без экранов? Запуск команды из Bash отлично:
$ git log -1 --pretty="format:%h %s"
4f14a66 basic debug page
В конце концов, я хочу использовать выход в шаблоне Django , 'print' понимает escape-последовательности, но как это сделать, чтобы получить простую строку? –
А .. Вы пытались «-no-color» при вызове git-log? – ThiefMaster
Без изменений с '--no-color' печально. –