Python fabric sudo () возвращает странные escape-символы в выводе - PullRequest
3 голосов
/ 13 октября 2011

Код, который я пытаюсь запустить:

from fabric.api import *
from fabric.contrib.files import *

def git():
    with cd('/home/something'):
        output = sudo('git log --pretty=oneline --no-color --abbrev-commit -n 1 HEAD')
        print repr(output)

Выполнено с тканью 0,9. Что-то:

$ fab git
[localhost] Executing task 'git'
[localhost] sudo: git log --pretty=oneline --no-color --abbrev-commit -n 1 HEAD
Password for deploy@localhost: 
[localhost] out: 67bec96 Merge branch 'master' of /home/something
"67bec96 Merge branch 'master' of /home/something"

Исполнено с тканью 1.2.2:

$ fab git
[localhost] Executing task 'git'
[localhost] sudo: git log --pretty=oneline --no-color --abbrev-commit -n 1 HEAD
[localhost] Login password: 
[localhost] out: sudo password:
[localhost] out: 67bec96 Merge branch 'master' of /home/something
[localhost] out: 
"\x1b[?1h\x1b=\r67bec96 Merge branch 'master' of /home/something\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>"

Вы можете видеть, что выходные данные из ткани 1.2.2 содержат некоторые нежелательные escape-символы вокруг фактического вывода.

Я пытался использовать sudo ('...') .stdout, но результат тот же.

Идеи

1 Ответ

3 голосов
/ 29 ноября 2011

Согласно журналу изменений Fabric:

В рамках изменений, внесенных в # 7, для run и sudo значение по умолчанию их pty kwargs изменилось с False на True.Это, а также добавление комбината kwarg / env var, может привести к значительным поведенческим изменениям в удаленных программах, которые работают по-разному при подключении к tty.

В основном с 0,9 до 1.отсюда ваша разница в выходе.

...