2013-09-05 153 views
1

我目前正在創建一個腳本,它將循環運行一組子進程,然後等待所有子進程完成。我必須在運行它們之前在子進程中添加變量,所以我想將它寫成字符串,然後將字符串轉換爲命令?會有這樣的事情存在嗎?Python - 將字符串轉換爲命令

例如,我有這些stringss:

"p1 = subprocess.Popen('python','hello.py')" 
"p2 = subprocess.Popen('python','hello2.py')" 

我將如何執行它能夠在腳本中稍後致電P1或P2? (延續p1.wait())

+0

既然你正在運行的Python的文件,你可以考慮使用'multiprocessing'模塊,而不是它是否適合你。 –

回答

6

使用字符串是一個壞主意,我會使用一個列表:

options = [('python','hello.py'), ('python','hello2.py')] 
for option in options: 
    process = subprocess.Popen(option) 
    #do something here 
+2

您可能想要保存'subprocess.Popen'的結果:'processes = [subprocess.Popen(option)for options in options]' –

+0

如果總是使用'​​python',則不需要一直重複列表。 – jcfollower

0
exec("p1 = subprocess.Popen('python','hello.py')") 

注意exec執行報表,而evalevaulates表達式。

但我同意其他答案,如果可以,最好以不同的方式做到這一點。你絕對不應該做的一件事是執行任意的字符串,你不知道它的來源,例如它們是否可以來自用戶。

+2

...還要注意'exec'隨機字符串是一個非常糟糕的做法。 – l4mpi