吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1181|回复: 17
收起左侧

[其他求助] 服务器宝塔里,我想在php文件里调用python,结果返回给php,不会弄,请求指导一下

[复制链接]
dncui 发表于 2024-1-10 18:42
100吾爱币
本帖最后由 dncui 于 2024-1-12 20:20 编辑

我之前发的问题可能不太合理,现在是重新描述一下,
/www/wwwroot/python/demo.py
在宝塔的网站 python项目里 添加了pyhon,并把第三方库安装上了,
在这个项目的 后边 那个终端按里进入 宝塔终端,执行 python3 demo.py ,py文件执行正常,可以采集到我要的信息。
我的python 文件能简单就是一个到url 采集信息的,执行一次,就采集一次。


我添加项目是从网站的python项目里添加的,不是从软件商城里的python项目管理器里添加的。


网站的python项目里添加的,虚拟环境是在/www/server/pyporject_evn/demo_venv里 ,不在/www/wwwroot/python/里。

但是demo_venv/bin里没有avtivate
执行 python3 -m venv demo_venv  后,demo_venv/bin是出现 avtivate
但是 在计划任务

cd /www/server/pyporject_evn/
source demo_venv/bin/activate

python3 /www/wwwroot/python/demo.py
执行后,还是不能正常执行。出现了一堆错误提示
也试了几种命令组合,但是都不行。


怎么才能正确的把 /www/wwwroot/python/demo.py 加到 计划任务里,定时执行?
或者 像楼下 说的那样,用端口访问 python , 127.0.0.1:5700  怎么弄?











最佳答案

查看完整内容

难道不应该使用py采集到的内容,然后把内容直接通过py写入文件或数据库里,再通过php对文件或数据库进行读取吗?为何一定要使用php执行py?执行py,也可以使用守护进程,或宝塔的计划任务定时采集都可以执行的啊。 另外再宝塔上运行py最好使用绝对路径执行py3,因为本身宝塔就存在py2

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

我是胜爷丶 发表于 2024-1-10 18:42
本帖最后由 我是胜爷丶 于 2024-1-10 23:35 编辑

难道不应该使用py采集到的内容,然后把内容直接通过py写入文件或数据库里,再通过php对文件或数据库进行读取吗?为何一定要使用php执行py?执行py,也可以使用守护进程,或宝塔的计划任务定时采集都可以执行的啊。
另外再宝塔上运行py最好使用绝对路径执行py3,因为本身宝塔就存在py2
Pwaerm 发表于 2024-1-10 19:23
把py打包成一个exe

或者注意一下php执行的py环境有没有安装依赖
blindcat 发表于 2024-1-10 19:34
PearNoNet 发表于 2024-1-10 20:22
你把原始的python写成后端形式然后运行不就好啦,你搞PHP的危险函数是让人方便给你入侵了是吧,比如Python开的后端是5700端口,你PHP直接curl访问127.0.0.1:5700端口的项目就行了,搞危险函数及其不推荐,分分钟被入侵
 楼主| dncui 发表于 2024-1-10 20:30
PearNoNet 发表于 2024-1-10 20:22
你把原始的python写成后端形式然后运行不就好啦,你搞PHP的危险函数是让人方便给你入侵了是吧,比如Python ...

我也知道 shell_exec不好,我具体应该怎么改呢,能具体说吗?特别是 那个第三方库,怎么弄啊
hc3w 发表于 2024-1-10 20:31
cai.py  转成PHP 不变好了。贴上代码看看。
14788871771 发表于 2024-1-10 21:36
找我呀,这个我熟悉,你可以用flask把你的方法做成http服务,然后用python项目管理器部署你的python项目,然后php去curl那个python项目就好了
知心 发表于 2024-1-11 00:39
库是额外的,单独一下。服务器看版本,还有py2和py3的区别。你自己研究下
tszlfasy 发表于 2024-1-11 01:01
本帖最后由 tszlfasy 于 2024-1-11 01:05 编辑

Python环境和依赖库的安装: PHP通过shell_exec来执行Python脚本,确保Python环境和脚本需要的第三方库都已正确安装。在宝塔面板的Python项目管理中添加项目时,需要确认项目的依赖库是否正确安装。

环境变量: PHP在执行命令时可能使用不同的环境变量。为了确保PHP能够找到正确的Python解释器和第三方库,可以在PHP中指定完整的Python路径:


$arg = 'url';
$pythonPath = '/path/to/python3';  // 替换为你的Python解释器路径
$scriptPath = 'cai.py';

$command = $pythonPath . ' ' . $scriptPath . ' ' . $arg;
$resp = shell_exec($command);
echo $resp;

虚拟环境: 如果你在Python项目中使用了虚拟环境(virtualenv),确保在PHP中激活虚拟环境。你可以在PHP中执行的命令前加上source /path/to/venv/bin/activate &&


$arg = 'url';
$venvPath = '/path/to/venv';  // 替换为你的虚拟环境路径
$pythonPath = $venvPath . '/bin/python';
$scriptPath = 'cai.py';

$command = 'source ' . $venvPath . '/bin/activate && ' . $pythonPath . ' ' . $scriptPath . ' ' . $arg;
$resp = shell_exec($command);
echo $resp;


Python脚本输出: 确保在Python脚本中使用print语句来输出结果,而不是print的注释或其他方式。
错误处理: 在PHP中捕获并输出可能的错误,以便更容易诊断问题。


$arg = 'url';
$pythonPath = '/path/to/python3';  // 替换为你的Python解释器路径
$scriptPath = 'cai.py';

$command = $pythonPath . ' ' . $scriptPath . ' ' . $arg;

// 执行命令并捕获错误
$output = [];
$returnCode = 0;
exec($command, $output, $returnCode);

if ($returnCode === 0) {
    // 执行成功
    $resp = implode("\n", $output);
    echo $resp;
} else {
    // 执行失败,输出错误信息
    echo "Error executing Python script. Return code: $returnCode\n";
    echo "Output: " . implode("\n", $output);
}


您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-12 04:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表