2014-04-08 68 views
2

我想從另一個腳本調用Python腳本。我現在用的是subprocess -module並調用它像這樣:從另一個Python腳本調用一個存儲在字符串中的參數的Python腳本

subprocess.call(["python","script.py","parameter_name parameter_value"], shell=False) 

的事情是,當我這樣調用它,它工作正常爲單個參數。當我有多個參數我試圖運行它這樣

subprocess.call(["python","script.py","parameter_one_name parameter_one_value", "parameter_two_name parameter_two_value"], shell=False) 

這並不是出於某種原因和腳本不提供任何錯誤信息,以及。所以,我試過這樣做

os.system("python script.py parameter_one_name parameter_one_value parameter_two_name parameter_two_value) 

這個作品和腳本按預期工作。我的問題是,當參數存儲在字符串中時可以調用腳本嗎? 例如,

parameter = parameter_one_name parameter_one_value+parameter_two_name parameter_two_value) 

與參數

我找不到任何迄今在SO執行腳本,所以這將是一個很大的幫助,如果任何人都可以提供幫助。

+0

嘿謝謝你的人看問題。使用 os.system(「python scriptname.py」+''+參數)訣竅!當然,如果有更好的方法來做到這一點,請讓我知道! – Rst

+0

在大多數情況下,最好導入模塊('import script')並調用其中的各種函數('result = script.func(arg1,arg2)'),而不是將它作爲另一個Python腳本中的腳本運行。 – jfs

回答

1

如果參數是一個字典d

import sys 
import subprocess 

params = [x for pair in d.items() if all(pair) for x in pair] 
subprocess.check_call([sys.executable, 'script.py'] + params) 
+0

感謝您的回答。這非常有趣! – Rst

1

你應該通過每個參數的值列表中的一個單獨的項目:

subprocess.call(["python","script.py","parameter_one_name","parameter_one_value", "parameter_two_name","parameter_two_value"], shell=False) 

如果需要的話,您可以撰寫從較小的列表您的參數列表:

param1 = ["parameter_one_name", "parameter_one_value"] 
param2 = ["parameter_two_name", "parameter_two_value"] 
subprocess.call(["python","script.py"] + param1 + param2, shell=False) 

我不知道當您使用單個參數+字符串中的值調用它時,場景的工作方式如何;它不應該,但沒有看到你正在傳遞的實際值,這是不可能的。

+0

謝謝你的回答。該場景是我通過Tkinter前端從用戶那裏獲得輸入值。我需要使用這些值調用腳本。這些值基本上是文件夾的路徑。其中大部分是腳本的可選參數,取決於用戶在可選參數中給出的值,我需要調用腳本。所以,我將這些值作爲鍵值對存儲在字典中,我通過將鍵和值連接爲非空值來調用腳本。當然,我只在字典中添加非空值。再次感謝! – Rst

相關問題