2013-10-30 48 views
8

我只需要提示如何正確地做事情。subprocess.Popen:如何傳遞一個列表作爲參數

說我有一個名爲script.py的腳本,它使用名稱列表作爲參數[「name1」,「name2」等]。

我想使用子流程模塊從另一個腳本調用此腳本。因此,我想要做的是:

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py", myList]) 

當然,這並不工作,因爲subprocess.Popen方法需要字符串作爲參數的清單。 所以,我認爲執行以下操作:

subprocess.Popen(["python", "script.py", str(myList)]) 

現在的過程開始,但它不工作,因爲它有一個字符串作爲參數,而不是一個列表。我應該如何解決這個問題?

回答

19

使用+運算符連接它們。

myList = ["name1", "name2", "name3"] 
subprocess.Popen(["python", "script.py"] + myList) 

順便說一句,如果你想使用相同的Python程序,與sys.executable更換"python"

+0

或'.extend()'如果您不確定附加參數的類型。 –

+0

@NiklasR或'+ list(myList)' – falsetru

+1

'extend'只有在調用之前修改指定列表時纔有用。 'subprocess.Popen([「python」,「script.py」] .extension(myList))'會傳遞'None'('extend'的返回值)作爲'Popen()'的第一個也是唯一的參數。 – chepner

1

感謝您快速回答falsetru。它不直接工作,但我知道該怎麼做。 你的建議是相當於做:

subprocess.Popen(["Python","script.py","name1","name2","name3"]) 

在那裏我有3個參數包含在我原來的列表中的字符串。

所有我需要在我script.py文件做的是建立以下從每個參數做收到一個新的列表:

myList = sys.argv[1:] 

myList中現在是一個比我最初一樣!

["name1","name2","name3"] 

不知道爲什麼我沒有早點考慮它!

相關問題