python fabric多个命令

时间:2017-06-05 08:08:09

标签: python fabric

我正在尝试了解Fabric如何在一台计算机上使用多个命令。 我需要在每个主机(数千个主机)上运行几个命令,并且想知道什么是最好的。

使用多次运行:

res_1 = run(command_1)
res_2 = run(command_2)
...
...
res_n = run(command_n)

或者:

res = run(command_1 && command_2 && ... command_n)
res.splitlines()
res_1 = res[0]
res_2 = res[1]
...
...
res_n = res[n-1]

我想知道的是Fabric如何处理多次运行,它会打开多个会话还是在同一个会话中执行所有命令?

2 个答案:

答案 0 :(得分:2)

无论您使用多个run来电还是run来电&&,AFAIK,Fabric都只会打开一个网络连接。两者之间的区别在于每个新run在不同的环境中执行。例如,你可以试试这个。

run('ls')
run('cd /tmp/')
run('ls')

两次都会显示您的主目录列表。但是如果你试试这个

run('ls')
run('cd /tmp/ && ls')

它会在第一次显示您的主目录,然后是/tmp/的列表。因此,如果您希望将状态从一个命令保留到另一个命令,则应该run('cmd1 && cmd1'),但如果您不关心它,则应使用多个run调用。

答案 1 :(得分:0)

这两种方法之间的重要区别在于,无论先前命令的退出状态如何,第一种方法都将运行所有命令;但是,第二个只会在command_1没有返回任何错误等的情况下执行commmand_2。所以如果你想要这个行为或另一个,这取决于你。