我正在使用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')
答案 0 :(得分:1)
execute()
docs表示只有host
,hosts
,role
,roles
和exclude_hosts
关键字参数是特殊的;其余的传递给任务,即shell
传递给test()
:
def test(shell):
with settings(shell=shell):
run('command')
execute(test, shell=server_shell, host=server_ip)