PHP帶參數傳值調用python指令碼

來源:互聯網
上載者:User

標籤:外部程式   web開發   content   type   python指令碼   encode   inpu   header   image   

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

  記得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執行外部程式延伸:   1、system — 執行外部程式,並且顯示輸出  說明:  string system ( string $command [, int &$return_var ] )  同 C 版本的 system() 函數一樣, 本函數執行 command 參數所指定的命令, 並且輸出執行結果。  如果 PHP 運行在伺服器模組中, system() 函數還會嘗試在每行輸出完畢之後, 自動重新整理 網頁伺服器的輸出緩衝。  如果要擷取一個命令未經任何處理的 原始輸出, 請使用 passthru() 函數。  參數:  command  要執行的命令。  return_var  如果提供 return_var 參數, 則外部命令執行後的返回狀態將會被設定到此變數中。  傳回值:  成功則返回命令輸出的最後一行, 失敗則返回 FALSE   2、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 sysdef ceshi(a,b,c):    d = int(a)+int(b)    r = int(d)+c    return rif __name__ == "__main__":    res = ceshi(a=sys.argv[1],b=sys.argv[2],c = sys.argv[3])    print(res)

 

  解釋:  1、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指令碼目錄之間以及每個參數之間的空格,  2、python如何接收PHP給他傳的參數  python接收PHP傳參數主要通過sys這個模組:  解釋(來自python手冊):  sys.argv  傳遞給Python指令碼的命令列參數列表。argv[0]是指令碼的名稱(是否是完整的路徑名這要取決於作業系統)。如果使用解譯器的-c命令列選項執行命令,則argv[0]設定為字串‘-c‘如果無指令碼名稱傳遞給 Python 解譯器, argv[0]是Null 字元串。  若要遍曆標準輸入或命令列上給出的檔案清單,請參閱fileinput模組。

PHP帶參數傳值調用python指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.