HTML
這是一個接受使用者輸入(url)的表單:
Go
PHP(Laravel)
此控制器将使用者輸入(url)的值存儲到變量中,以便在python腳本中使用。
$url = Input::get('url');
$name = shell_exec('path/to/python ' . base_path() . '/test.py ' . $url);
return $name;
Python
腳本傳遞使用者輸入的内容并在正斜杠後顯示文本并顯示它。
url = sys.argv[1]
name = url.split('/')[-1]
print(name)
回到PHP,它傳回Python腳本中執行的值。如果使用者輸入url:http://example.com/file.png,它将成功傳回字元串file.png
關于這一切的一切都有效,但我意識到我限制自己,因為shell_exec指令隻會粘貼從python腳本傳回的字元串。如果我想要傳回多個變量,我該怎麼辦?
有問題的Python
url = sys.argv[1]
name = url.split('/')[-1]
test ="pass this text too!"
# ? what goes here ?
是以HTML頁面現在應該傳回file.png和pass this text too!
我是否需要在python中傳回一個數組或json,然後在PHP中提取數組/ json?
注意:我知道這些示例中的安全漏洞/注入,這些是我的實際代碼的精簡版本。
對你提出的問題并不完全是一個答案,但如果這是一個複雜性較小的項目,我建議使用資料庫來處理各個程序之間的通信。如果一台機器都在一台機器上,那麼SQLite的開銷非常小,可以創造奇迹。
@KalZekdor你能詳細說明你的意思嗎? db存儲什麼?
取決于您的特定應用。例如,如果使用者通過php上傳需要由python使用的圖像,而不是将路徑作為python arg傳遞給圖像,則存儲圖像(路徑或資料),上傳者,上傳日期,作業狀态然後,python腳本可以在db中運作未處理的作業并對它們進行操作。
正如我所說,這并不是你所要求的答案,但值得研究(除非這是一個快速的一次性腳本,在這種情況下它有點矯枉過正)。您可以以更健壯的方式建構應用程式。通過指令行參數來回傳遞資料是一種快速而肮髒的解決方案;易于實施,但容易破損,維護噩夢。
您可以傳回一個數組,但要確定元素不包含分隔符。
喜歡print(','.join(name, test))。
或者您可以像json.dumps([name, test])一樣編碼為json,然後在PHP中解析json。 當然,第二個更好。
我投了票,因為我錯過了JSON !! 我每天都在使用它。 對我感到羞恥:D
@HalayemAnis對你感到羞恥:D
在這種情況下,您的Python腳本必須傳回格式化的響應,PHP腳本可以正确解析并使用其值确定變量
例如,你的python代碼必須傳回類似的東西:
file_name=file.png;file_extension=png;creation_date=1/1/2015;
在你的PHP代碼之後,你做了必要的東西
$varValues = explode(";", $PythonResult);
foreach($varValues as $vv) {
$temp = explode("=", $vv);
print 'Parameter : ' . $temp[0] . ' value : ' . $temp[1] . '
';
}