Python结构sudo()在输出中返回奇怪的转义字符

时间:2011-10-13 12:18:59

标签: python linux shell fabric

我正在尝试运行的代码:

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.something:

执行
$ 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>"

您可以看到fabric 1.2.2的输出在实际输出周围有一些不需要的转义字符。

我尝试使用sudo('...')。stdout,但结果是一样的。

想法?

1 个答案:

答案 0 :(得分:3)

根据Fabric的更改日志:

作为#7中所做更改的一部分,run和sudo将其pty kwargs的默认值从False更改为True。加上combine_stderr kwarg / env var的加法,可能会导致远程程序发生重大的行为变化,这些变化在附加到tty时会有不同的操作。

基本上从0.9到1.x默认值已被交换,因此您的输出差异。