2013-02-10 65 views
1

我目前使用诸如命令织物脚本:如何在面料中做sudo -E .....?

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') 

,但似乎传递选项点子安装,而不是须藤

编辑2:

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

给我一个Typ reError:格式需要的映射

EDIT 3:

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

是给我一个TypreError:不串格式化

+0

你可以试试:env.sudo_prefix =“sudo -E -S -p'%s'” – Redian 2013-02-10 21:52:49

+0

运行但似乎没有覆盖原来的sudo_prefix,它将我带回原来的错误, 1错误运行PIP当安装代码 – Calum 2013-02-10 22:06:18

回答

1

从织物源文件过程中被转化的所有参数。 sudo的方法签名如下:

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): 

提供没有显示出任何这样的场景示例(惊人的),我将不得不赌,否则。

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' 

我建议你提供的用户密钥。

看一看这个公开售票:

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

与运行您尝试运行UR()的命令

run('sudo -E pip install virtualenv --upgrade --use-mirrors') 
+0

我还发现[sudo_prefix(http://docs.fabfile.org/en/1.5/usage/env.html?highlight=options),但还没有得到它的工作还没有 – Calum 2013-02-10 21:06:11

+0

运行('sudo -E pip install virtualenv --upgrade --use-mirrors')似乎可以在我的主机上运行,​​但是当我从我的'ubuntu-server'virtualbox运行它时,它返回错误代码1 – Calum 2013-02-10 21:30:22

+0

env.sudo_prefix = “sudo -E -S -p'%(sudo_prompt)s'”%env – Redian 2013-02-10 21:40:17

0

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

$ sudo visudo 

和配置sudo来允许用户在不提示输入密码运行点子。

否则,你正在创造一些安全问题。

+0

我正在运行它的方式我使用:sudo('pip install virtualenv --upgrade --use-mirrors')只需要用户第一次输入他们的密码,而不是c在密码中输入 – Calum 2013-02-11 03:11:54