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

我正在尝试运行的代码:

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的输出在实际输出周围有一些多余的转义字符.

我尝试使用sudo(‘…’).stdout,但结果相同.

有想法吗?

最佳答案
根据Fabric的变更日志:

作为#7中所做更改的一部分,run和sudo的pty kwargs的默认值从False更改为True.这加上添加的Combine_stderr kwarg / env var可能会导致远程程序的重大行为更改,这些远程程序在连接到tty时会以不同的方式运行.

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

转载注明原文:Python结构sudo()在输出中返回奇怪的转义字符 - 代码日志