2017-06-05 70 views
1

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

使用多个运行:

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] 

我想知道的是面料如何处理多个运行,将它打开多个会话或做在同一个会话中的所有命令?

回答

1

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

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

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

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

它会告诉你你的home目录第一次,随后/tmp/的列表。因此,如果您希望将状态从一个命令保存到另一个命令,您应该执行run('cmd1 && cmd1'),但如果您不打扰它,则应该使用多个run调用。

+0

我的命令是相互独立的,所以建议使用多个'run' S' –

+0

是的,如果没有别的,我会使用多个'run's。他们更可读。 – e4c5

0

这两种方法之间的重要区别是,第一个将运行所有的命令,无论前者的命令的退出状态;但是,如果command_1没有返回任何错误等,则第二个将仅执行commmand_2。因此,如果您想要这种行为或其他,则由您决定。

+0

挂上秒,除非我非常误会,如果有任何命令返回非零退出状态,无论使用样式1还是样式2,结构都不会运行其余的结构 – e4c5

+0

我站在更正位置 - 除非warn_only '被设置为'真',它将按照你所说的行事。 –

+0

我想知道的是,如果使用多个'run'会导致更多的“网络开销”,那么使用一个'run'来执行多个命令 –