1

我有一个当前使用以下命令的结构脚本:

sudo('pip install virtualenv --upgrade --use-mirrors')

我想知道的是如何通过 sudo -E 选项来运行它?

sudo -E pip install virtualenv --upgrade --use-mirrors

编辑:

试过这个:

sudo('pip install virtualenv --upgrade --use-mirrors, -E')

但这似乎通过了 pip install 而不是 sudo 的选项

编辑2:

env.sudo_prefix = "sudo -E -S -p '%(sudo_prompt)s'"

给我一个 TypreError: format requires a mapping

编辑 3:

env.sudo_prefix = "sudo -E -S -p '%(sudo_prompt)s'" % env

给了我一个 TypreError: 在字符串格式化期间不是所有参数都转换了

4

2 回答 2

1

From the fabric source file . the sudo method signature is as follows :

def sudo(command, shell=True, pty=True, combine_stderr=None, user=None,
    quiet=False, warn_only=False, stdout=None, stderr=None, group=None,
    timeout=None):

the examples provided do not show any such scenario (amazingly) i would have bet otherwise.

sudo("~/install_script.py")
        sudo("mkdir /var/www/new_docroot", user="www-data")
        sudo("ls /home/jdoe", user=1001)
        result = sudo("ls /tmp/")
        with settings(sudo_user='mysql'):
            sudo("whoami") # prints 'mysql'

I would suggest you supply the user key.

Have a look at this open ticket :

https://github.com/fabric/fabric/issues/503

Have your tried running ur command with run()

run('sudo -E pip install virtualenv --upgrade --use-mirrors')
于 2013-02-10T20:54:13.650 回答
0

这是一个非常糟糕的主意,它会迫使您存储密码明文等。正确的™方法是运行

$ sudo visudo

并配置 sudo 以允许您的用户在不提示输入密码的情况下运行 pip。

否则,您将产生许多安全问题。

于 2013-02-10T22:25:17.183 回答