Как я могу выполнить скрипт python из php и отправить запрос curl из python? - PullRequest
0 голосов
/ 31 марта 2019

Я хочу выполнить скрипт python из php-скрипта, который отправит запрос curl в веб-API и вернет результат запроса curl в php-скрипт, который распечатает его или выполнит дальнейшую обработку. Проблема заключается в том, что я запускаю скрипт python независимо выдает правильный вывод, но когда он вызывается из скрипта php, он не работает

Я попытался изменить разрешения для папки htdocs на сервере xampp, и, поскольку я думал, что файл образа, который загружается на сервер через запрос API, недоступен.

Это часть php-скрипта, которая выполняет скрипт python

 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, "face ": [{" face_rect ": {" width ": 134," top ": 159," left ": 242," height ": 134}," face_token ":" a0bc6e53782d0c38a837187a832da542 "}]} '

но он печатает пустые квадратные скобки. []

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Если вы просто хотите сделать запрос CURL, вам лучше использовать встроенные функции PHP CURL, чтобы сделать ваш код менее сложным (https://www.php.net/manual/en/book.curl.php)

Но если вы все еще хотите использовать скрипт python,тогда нужно проверить:

  • Сценарий исполняется пользователем XAMPP
  • В первой строке скрипта Python есть питон SHEBANG #!/usr/bin/env python ( см. объяснение)
  • Python не входит в PATH пользователей XAMPP (или использует полный путь вместо python в shell_exec)

Кроме этого, вы можете попробовать использовать execвместо shell_exec, поскольку shell_exec не вернет значение, если выдана ошибка

$command = 'python /scripts/some_script.py';
$response = [];
$code = 0;
exec($command, $response, $code);
var_dump($code);
print_r($response);
0 голосов
/ 31 марта 2019

Создайте файл оболочки для выполнения скрипта Python и убедитесь, что он исполняемый. Затем заставьте PHP выполнить этот файл оболочки.

Это работает для меня

...