如何在fabric.operations.execute中指定env.shell

时间:2014-03-25 06:13:17

标签: python fabric

我正在使用fabric.tasks.execute在远程服务器上执行命令,并且需要根据系统使用不同的shell。现在我的代码就像:

def run_test(server_ip, server_shell):
    execute(test,server_ip,server_shell,host=server_ip) # host can be specified in execute argument

def test(ip,shell):
    env.shell=shell
    run('command')

我可以忍受这个但更喜欢执行指定env.shell命令将使用而不是在任务中分配它,这只是简单和干净。我可以使用类似的东西:

def run_test(server_ip, server_shell):
    execute(test,server_ip,server_shell,host=server_ip,*shell=server_shell*) # host can be specified in execute argument

def test(ip,shell):
    run('command')

1 个答案:

答案 0 :(得分:1)

execute() docs表示只有hosthostsrolerolesexclude_hosts关键字参数是特殊的;其余的传递给任务,即shell传递给test()

def test(shell):
    with settings(shell=shell):
        run('command')

execute(test, shell=server_shell, host=server_ip)