由於我的**專案的後端採用的是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...