php傳參呼叫python指令碼

2021-10-09 01:49:44 字數 1902 閱讀 2155

由於我的**專案的後端採用的是php

但是在爬蟲方面的時候 python是最簡單的選擇

因此需要php與python進行互動 (需求是要帶引數的 例如自動登入某個** 而使用者密碼是不同的

查閱資料得知 php有這個函式exec()

這個函式的作用可以執行第三方程式 約等於在shell命令列中輸入指令 約等於c/c++ 的system()

exec()函式的原型為:

string exec(string $command [, array &$output [, int &$return_var]])

第乙個引數當然就是命令列的指令啦

例如:

$cmd

="python test.py"

;

那麼如果你把這個字串的內容在你的shell上跑的時候 那麼它會呼叫你的python解析器 (windows需要設定好路徑才能解析到python這個命令) 來跑這個名字叫test的python指令碼 (此處這樣寫是相對路徑 表示在當前命令列目錄下)

如果不是在當前目錄下的話 你可能就得這樣寫:

$cmd

="python c:\xx\xx\test.py"

;

寫上絕對路徑 linux同理

第二個引數我們發現是乙個引用型別的 意思是它會把執行cmd指令後的返回內容給存到你所給的這個變數中(以列表的形式返回 返回每行是乙個列表成員)

$cmd

="python test.py"

;unset

($outputs);

exec

($cmd

,$outputs);

foreach

($outputs

as$out

)echo

$out."

";

那麼以上**就會輸出test指令碼的返回(即python的print輸出的內容)內容

第三個引數也是個引用型別 如果填了這個引數 那麼命令執行後的成功與否狀態將會寫入這個引數

一般不需要填這個 如果語法錯誤 或者有問題 那麼返回內容是空的或者缺失的 這個可以檢查到

有個額外的點是 最好是把python指令碼除錯完整作為完美的api才來呼叫 否則如果python指令碼有錯誤或者死迴圈 那麼該次php呼叫指令碼都是失敗的

當然這個是編寫python的內容問題

php對python傳參

這個可以通過命令列命令傳參來實現

因為本身的命令

python test.py 123

4

在指令碼名後面的所有 都是作為命令列引數進入到python指令碼中去的

在python中可以用sys.ar**來獲取到

比如以下是乙個python指令碼 test.py

import sys

for data in sys.ar**:

print

(data)

那麼執行php指令碼後將會得到以下輸出

test.py 1 2 3 4

因為sys.ar**[0]永遠都是指令碼名稱 (含路徑 假如輸入的話)

在寫python指令碼的時候注意去掉就好

那麼用以上的內容就能做到例如 傳入使用者帳號密碼 然後php丟給python去爬內容 或者自動登入 啥啥啥的

同理exec函式還能呼叫其他程式 比如c++等 只要你裝了環境並且能在shell中開啟

php傳參呼叫kettle指令碼

php 4,php 5,php 7 system 執行外部程式,並且顯示輸出 system string command,int return var string 同 c 版本的system 函式一樣,本函式執行command引數所指定的命令,並且輸出執行結果。如果 php 執行在伺服器模組中,s...

shell指令碼呼叫傳參

start.sh export testname jc test.sh build assetbundles true test.sh build assetbundles 1 build dev 2 echo echo 結果build assetbundles true 其他 echo 列印所有傳...

python 函式,傳參,呼叫

簡單函式介紹 定義 形參 實參 傳參的4中方式 呼叫 return 1.函式定義 python中函式必須先定義,再使用.寫乙個函式前要空兩行,寫完後再空兩行.pycharm書寫 def 函式名 引數 1 2 2.函式呼叫 函式名 引數 舉例 使用函式完成 1 2 定義函式 def add resul...