簡體   English   中英

如何從php執行python腳本並從python發送curl請求?

[英]How can I execute a python script from php and send a curl request from python?

我想從php腳本執行一個python腳本,它將向Web api發送一個curl請求,並將curl請求的輸出返回到php腳本,該腳本將打印它或進行進一步處理。問題是當我運行python腳本時獨立地它會產生正確的輸出,但是當它從php腳本中調用時卻不起作用

我曾嘗試更改xampp服務器上的htdocs文件夾的權限,並且由於我認為無法訪問通過api請求上傳到服務器的圖像文件。

這是執行python腳本的php腳本的一部分

 if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    sleep(5);
    $command = escapeshellcmd('python3 /opt/lampp/htdocs/script.py');
    $output = shell_exec($command);
    echo $output;
}

這是python腳本

#!/usr/bin/env python
import sys
import subprocess
import os
import ast
import requests
from time import sleep
import datetime
file = open('/opt/lampp/htdocs/count.txt','r')
uid=file.read().strip()
file.close()
print(uid)
pipe = subprocess.Popen('curl -X POST "https://api- 
us.faceplusplus.com/facepp/v3/detect" -F 
"api_key=some_key" \
-F "api_secret=some_key" \
-F "image_file=@/opt/lamppp/htdocs/image.jpg"', stdout=subprocess.PIPE, shell=True, 
universal_newlines=True)
j = pipe.stdout.readlines()
print(j)

預期的輸出應在調用php頁面時輸出類似以下內容的內容。

['{“ image_id”:“ mprd5Pjd9ni + sPD4fWzv9g ==”,“ request_id”:“ 1554044606,8bba1d32-9b73-4457-a024-cb3ad66ee349”,“ time_used”:623,“ faces”:[{“ face_rectangle”:{ “ width”:134,“ top”:159,“ left”:242,“ height”:134},“ face_token”:“ a0bc6e53782d0c38a837187a832da542”}]}'

但它會打印出空的方括號。[]

如果您只想發出CURL請求,那么最好使用PHP的內置CURL函數來使代碼復雜度降低( https://www.php.net/manual/zh/book.curl.php

但是,如果您仍然想使用python腳本,則需要檢查的是

  • 該腳本可由XAMPP用戶執行
  • 您在python腳本#!/usr/bin/env python的第一行上有python SHEBANG( 請參閱說明
  • Python是XAMPP用戶PATH的一部分(或在shell_exec中使用完整路徑而不是python)

除此之外,您可以嘗試使用exec而不是shell_exec因為如果拋出錯誤,則shell_exec不會返回值

$command = 'python /scripts/some_script.py';
$response = [];
$code = 0;
exec($command, $response, $code);
var_dump($code);
print_r($response);

創建一個shell文件以執行python腳本並確保其可執行文件,然后使PHP執行該shell文件。

這個對我有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM