2017-06-05 45 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'來執行多個命令 –