2016-09-27 92 views
2

理想情況下,它應該像我想要使用單個子進程調用執行所有這些命令的命令列表。我可以通過將所有命令存儲爲shell腳本並使用子進程調用該腳本來做類似的事情,但我需要一個純粹的python解決方案。我將使用shell = True執行命令,並且我瞭解風險。如何用一個python子進程調用執行多個shell命令?

+0

你能提供一個典型的你想要執行的命令類型的例子嗎? – idjaw

+0

您可以使用'&'/';'/'&&'將這些命令鏈接在一起嗎?爲什麼只有一個子進程調用 - 爲什麼不循環會給你更多的控制權,例如,提前終止? – ryachza

+2

使用';'按順序放置它們:'subprocess.call(「do_A; do_B; do_C;」,shell = True)'。以編程方式:'call(';'.join(commands),shell = True)' – Bakuriu

回答

1

如果它們是獨立的,使用分號鏈接它們。

例如,(Python 3中)

>>> import subprocess 
>>> result = subprocess.run('echo Hello ; echo World', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
>>> result 
CompletedProcess(args='echo Hello ; echo World', returncode=0, stdout=b'Hello\nWorld\n') 

但在技術上,這不是一個純Python溶液,因爲shell=True。 arg處理實際上是由shell完成的。 (你可能會認爲它是執行/bin/sh -c "$your_arguments"

如果你想要一個更純粹的解決方案,你必須使用shell=False並循環你的幾個命令。據我所知,沒有辦法直接用子流程模塊啓動多個子流程。

+1

必須通過命令列表循環。一個外殼可以做到這一點。 python可以做到這一點。 – Skaperen

+0

@Skaperen正好。只是,如果Python執行循環和'exec()'系統調用,我會認爲它更純粹,因爲OP需要。 –

相關問題