Печать stdout в Python без escape-последовательностей оболочки

Я использую sh для запуска команд git внутри сценария Python.

 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" т.е. строку без "4f14a66 basic debug page" ? Выполнение команды из Bash в порядке:

 $ git log -1 --pretty="format:%h %s" 4f14a66 basic debug page 

2 Solutions collect form web for “Печать stdout в Python без escape-последовательностей оболочки”

s.stdout в REPL не распечатает его, а отобразит его repr() . Используйте print s.stdout чтобы получить то, что вы ищете.

Если вы не хотите, чтобы escape-коды рассматривали выполнение его с помощью subprocess.call() – поскольку stdout не является tty, большинство программ не выводят никаких управляющих последовательностей.

Согласно этой проблеме GitHub , правильным решением проблемы является использование _tty_out=False :

 >>> str(git('show', format='%cN', s=True)) '\x1b[?1h\x1b=\rHonza Javorek\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>' >>> str(git('show', format='%cN', s=True, _tty_out=False)) 'Honza Javorek\n' 

Это также решение для моего дублированного вопроса: с помощью sh, git show возвращает специальные символы – как получить простой вывод?

  • Vim запуск ярлыка
  • Какой терминал использует Python IDLE для Windows
  • Сравните файл .txt и .csv и нужно заменить соответствующим именем в файле .csv на .txt
  • Правильно ли это запустить сценарий оболочки внутри Python?
  • Проверка интерактивной оболочки в скрипте Python
  • Как передать вызов подпроцесса в текстовый файл?
  • Цитировать Цитировать POSIX shell специальные символы на выходе Python
  • как перенаправить полный вывод скрипта
  • Python Script не работает в crontab, вызывающем pysaunter
  • Высокое использование процессора Python
  • Скрипт для тестирования Mobile-Friendly
  • Python - лучший язык программирования в мире.