为了账号安全,请及时绑定邮箱和手机立即绑定

当使用php脚本中的eval()调用脚本以及从bash脚本调用相同的函数时

当使用php脚本中的eval()调用脚本以及从bash脚本调用相同的函数时

30秒到达战场 2022-09-06 16:54:00
我有一个可执行的python脚本,它使用pymysql库存档来自mysql服务器的数据。该脚本从命令行运行良好。我使用escapeshellcmd函数从php脚本调用此脚本,并且我已经让它工作了。我还创建了一个bash脚本,我打算从crontab使用它来存档信息。我也可以通过进行下面概述的更改来使此脚本正常工作。不知何故,我遇到了python版本和路径问题。如果我包括#!/home/tim/anaconda3/bin/python作为python脚本的第一行,当被php脚本调用时,它可以工作(我相信使用www-data作为用户)。它无法从 bash 脚本或命令行工作,并给出以下错误:  File "./signal_archive.py", line 22, in <module>    import pymysqlModuleNotFoundError: No module named 'pymysql'但是,如果 python 脚本的第一行如下所示:#!/usr/bin/python3该脚本从 bash 脚本和命令行工作,但不能从 php 脚本工作。它给出以下错误:  File "/home/tim/python/commodities_related/signal_archive.py", line 23, in <module>    import pandas as pdModuleNotFoundError: No module named 'pandas'这两个软件包都安装在我的系统上。考虑到将脚本指向路径会有所帮助,我将以下内容添加到python脚本中,但到目前为止没有运气。sys.path.append('/usr/lib/python3/dist-packages:')sys.path.append('/usr/local/lib/python3.5/dist-packages:')显然,我错过了一些东西。我认为是php脚本是由www-user调用的,我不知道默认路径。bash文件由我的用户使用.bashrc文件中指定的路径调用。但是,我可能需要指出apache或php(www-user)才能使用Python的特定安装。编辑 - 为了更清楚,php脚本(phpfile1.php)调用python脚本。当我从另一个在apache2上运行的php脚本(phpfile2.php)调用phpfile1.php时,我一切都可以使用#!/home/tim/anaconda3/bin/python当我从bash脚本从不同的php脚本(phpfile3.php)调用同一文件(phpfile1.php)时,它会失败。此外,如果我使用以下命令就地运行该文件./signal_archive.py我收到错误,但如果我使用以下命令运行它,它的工作原理:python signal_archive.py任何想法,如果这是正确的或如何做?谢谢。
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

我通过2个步骤修复了这个问题:


事实证明,我需要将 anaconda3 的路径添加到我的.bash_profile文件中。


export PATH="/home/tim/anaconda3/bin:$PATH"

安装 anaconda3 后,它会使用前面的代码片段修改 .bashrc 文件。然而,在这种情况下,.bash_profile做出了改变。


我还修改了python文件的顶部,以使用anaconda路径进行执行,并为特定的python包添加路径。


#!/home/tim/anaconda3/bin/python

import sys

sys.path.insert(1, '/usr/local/lib/python3.5/dist-packages')


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信