2012-07-12 60 views
3

我使用php設置SOAP服務器。在處理SOAP請求時,我需要調用一些現有的Python腳本。這些腳本通常返回3個值:成功,描述和數據。PHP調用Python,返回多個值

如何將所有三個值傳遞迴php?

我的要求是:

exec('python test.py', $output); 

test.py做:

from getData import getData 

status, description, data = getData() 

return status, description, data 

和我現有的蟒蛇看起來是這樣的:

def getData(): 
    database = Database() 

    # get all the Data from the db 
    data = database.getData() 

    if data is None: 
     return False, "...notes...", "" 

    return True, "...notes...", data 

我不知道回報在test.py中是正確的。但即使是這樣,當我看着var_dump($輸出),我看到的只是「Array」

任何人有什麼想法?

TIA,

布賴恩

+0

當你在命令行執行'python test.py'時會發生什麼? – 2012-07-12 23:10:16

+0

好點。我確實有打印,但改爲返回。如果我做了一個返回,我得到「SyntaxError:'return'outside function」 – 2012-07-12 23:19:16

回答

5

由於exec()呼叫接收殼輸出到可變$output,它沒有接收到來自Python函數返回字符串的方式。您不必將它們退回,而必須打印它們,並且每條打印的線將進入exec()陣列$output

主要腳本必須打印值到stdout:

from getData import getData 
status, description, data = getData() 

# Print the values 
print("STATUS:", status) 
print("DESCRIPTION:", description) 
print("DATA:", data) 

在PHP中,檢查輸出你回來:

exec("python test.py", $output); 
var_dump($output); 

您需要格式化你的print語句在Python到的東西您可以輕鬆解析PHP中的值,例如每行一個或鍵:值對,您可以使用explode()

+1

好吧,T/F會去exec的return_var呢?如果我的例子中列出的「筆記」是一個多行,可變長度的字符串,我仍然可以通過$ output [0]和$ output [1]中的數據訪問它。 – 2012-07-12 23:16:42

+0

@BrianCox對不起,我錯了。你對'getData()'的調用可以像你一樣工作,但是你需要從python腳本打印值。如果你期望多行字符串,你需要設計一些方法來解析它們,比如'key:value'對。 – 2012-07-12 23:21:16

+1

如果輸出結果很複雜,我會考慮將python輸出編碼爲JSON,這會使得在PHP中讀取更容易一些。 – ernie 2012-07-12 23:29:10