Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python fabric sudo() returning weird escape characters in output

The code I'm trying to run:

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)

Executed with fabric 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"

Executed with fabric 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>"

You can see that output from fabric 1.2.2 has some unwanted escape characters around the actual output.

I tried using sudo('... ').stdout, but the result is the same.

Ideas?

like image 482
Akarot Avatar asked Mar 02 '26 22:03

Akarot


1 Answers

As per Fabric's changelog:

As part of the changes made in #7, run and sudo have had the default value of their pty kwargs changed from False to True. This, plus the addition of the combine_stderr kwarg/env var, may result in significant behavioral changes in remote programs which operate differently when attached to a tty.

Basically from 0.9 to 1.x default value has been swapped, hence your output difference.

like image 71
favoretti Avatar answered Mar 04 '26 22:03

favoretti



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!