PHP帶參數傳值調用python腳本

PHP主要用在服務器端作網站後臺開發,有些功能用PHP來實現有點費勁或者沒法實現,如今在學習python,一樣是腳本語言,感受python能作的事情PHP不必定能勝任。可是如今大部分的網站後臺也是用PHP寫的,雖然python能夠做爲WEB開發(flask,這個看了一段時間感受既然網站用PHP開發好了,python能夠作PHP作很差的事情,豈不是更好,逐暫緩),如今有在思考一個問題:有沒有什麼辦法可讓PHP與python結合進來,PHP與python各作他們擅長的事情,畢竟工做中快速開發運行見效果仍是佔到了很大的需求比例。html

  記得PHP中有一個函數能夠運行第三方的腳本:exec(),來看看exec的函數結構:
   string exec ( string $command [, array &$output [, int &$return_var ]] )
  參數解釋(來自PHP手冊)
  command
  要執行的命令。
  output
  若是提供了 output 參數, 那麼會用命令執行的輸出填充此數組, 每行輸出填充數組中的一個元素。 數組中的數據不包含行尾的空白字符,例如 \n 字符。 請注意,若是數組中已經包含了部分元素, exec() 函數會在數組末尾追加內容。若是你不想在數組末尾進行追加, 請在傳入 exec() 函數以前 對數組使用 unset() 函數進行重置。
  return_var
  若是同時提供 output 和 return_var 參數, 命令執行後的返回狀態會被寫入到此變量。
  返回值:
  命令執行結果的最後一行內容。 若是你須要獲取未經處理的所有輸出數據, 請使用 passthru() 函數。
  若是想要獲取命令的輸出內容, 請確保使用 output 參數。
   PHP執行外部程序延伸:
   一、system — 執行外部程序,而且顯示輸出
  說明:
  string system ( string $command [, int &$return_var ] )
  同 C 版本的 system() 函數同樣, 本函數執行 command 參數所指定的命令, 而且輸出執行結果。
  若是 PHP 運行在服務器模塊中, system() 函數還會嘗試在每行輸出完畢以後, 自動刷新 web 服務器的輸出緩存。
  若是要獲取一個命令未經任何處理的 原始輸出, 請使用 passthru() 函數。
  參數:
  command
  要執行的命令。
  return_var
  若是提供 return_var 參數, 則外部命令執行後的返回狀態將會被設置到此變量中。
  返回值:
  成功則返回命令輸出的最後一行, 失敗則返回 FALSE
   二、passthru — 執行外部程序而且顯示原始輸出
  void passthru ( string $command [, int &$return_var ] )
  同 exec() 函數相似, passthru() 函數 也是用來執行外部命令(command)的。 當所執行的 Unix 命令輸出二進制數據, 而且須要直接傳送到瀏覽器的時候, 須要用此函數來替代 exec() 或 system() 函數。 經常使用來執行諸如 pbmplus 之類的能夠直接輸出圖像流的命令。 經過設置 Content-type 爲 image/gif, 而後調用 pbmplus 程序輸出 gif 文件, 就能夠從 PHP 腳本中直接輸出圖像到瀏覽器。
  參數:
  command
  要執行的命令。
  return_var
  若是提供 return_var 參數, Unix 命令的返回狀態會被記錄到此參數。
  返回值:
  沒有返回值。
  此次使用的執行外部程序的函數爲exec函數:
   PHP測試代碼:
  
header("Content-type:text/html;charset=utf-8");
  // 測試PHP執行python代碼
  $a = 5;
  $b = 8;
  $c = 'Davidszhou的PHP操做帶參數的python腳本並返回結果';
  $d = urlencode($c);
  unset($out);
  $c = exec("C:\python35\python plug/index.py {$a} {$b} {$d}",$out,$res);
  print_r(urldecode($out[0]));
  echo "<br>";
  echo '外部程序運行是否成功:'.$res."(0表明成功,1表明失敗)";

 

   python測試代碼:
  
#-*- coding:utf-8 -*-
import sys
def ceshi(a,b,c):
    d = int(a)+int(b)
    r = int(d)+c
    return r
if __name__ == "__main__":
    res = ceshi(a=sys.argv[1],b=sys.argv[2],c = sys.argv[3])
    print(res)

 

 
 解釋:
  一、exec問題:
  exec("C:\python35\python plug/index.py {$a} {$b} {$d}",$out,$res):"C:\python35\python":這是本地環境中python安裝的絕對環境,‘plug/index.py’:這個是python腳本的目錄,後面{$a} {$b} {$d}是緊隨的參數注意它與python腳本目錄之間以及每一個參數之間的空格,
  二、python如何接收PHP給他傳的參數
  python接收PHP傳參數主要經過sys這個模塊:
  解釋(來自python手冊):
  sys.argv
  傳遞給Python腳本的命令行參數列表。argv[0]是腳本的名稱(是不是完整的路徑名這要取決於操做系統)。若是使用解釋器的-c命令行選項執行命令,則argv[0]設置爲字符串'-c'若是無腳本名稱傳遞給 Python 解釋器, argv[0]是空字符串。
  若要遍歷標準輸入或命令行上給出的文件列表,請參閱fileinput模塊。
相關文章
相關標籤/搜索