首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从php执行python脚本并从python发送curl请求?

如何从php执行python脚本并从python发送curl请求?
EN

Stack Overflow用户
提问于 2019-03-31 23:41:20
回答 2查看 450关注 0票数 0

我想从php脚本执行python脚本,它将发送curl请求到web api,并将curl请求的输出返回到php脚本,php脚本将打印它或做进一步的processing.The。问题是当我独立运行python脚本时,它会产生正确的输出,但当它从php脚本调用时,它不工作。

我已经尝试更改xampp服务器上htdocs文件夹的权限,因为我认为通过api请求上传到服务器的图像文件是不可访问的。

这是执行python脚本的php脚本的一部分。

代码语言:javascript
复制
 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脚本

代码语言:javascript
复制
#!/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,“request_id”:159,"left":242,"height":134},"face_token":"a0bc6e53782d0c38a837187a832da542"}}‘

但是它会打印空的方括号。[]

EN

回答 2

Stack Overflow用户

发布于 2019-04-01 01:53:55

如果只想发出CURL请求,最好使用PHP的内置CURL函数来简化代码(https://www.php.net/manual/en/book.curl.php)。

但是,如果您仍然希望使用python脚本,则需要检查以下内容

  • 脚本可由XAMPP用户执行
  • 您可以在python脚本的第一行使用python SHEBANG #!/usr/bin/env python python是XAMPP用户路径的一部分(或者使用完整路径而不是shell_exec中的python)

除此之外,您可以尝试使用exec而不是shell_exec,因为如果抛出错误,shell_exec不会返回值

代码语言:javascript
复制
$command = 'python /scripts/some_script.py';
$response = [];
$code = 0;
exec($command, $response, $code);
var_dump($code);
print_r($response);
票数 1
EN

Stack Overflow用户

发布于 2019-04-01 01:26:53

创建一个shell文件来执行您的python脚本,并确保它是可执行的,然后让PHP来执行这个shell文件。

这对我很管用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55442576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档