【发布时间】:2020-03-20 01:49:25
【问题描述】:
我有一个可执行的 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 pymysql
ModuleNotFoundError: 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 pd
ModuleNotFoundError: No module named 'pandas'
这两个软件包都安装在我的系统上。考虑将脚本指向路径会有所帮助,我在 python 脚本中添加了以下内容,但到目前为止没有运气。
sys.path.append('/usr/lib/python3/dist-packages:')
sys.path.append('/usr/local/lib/python3.5/dist-packages:')
显然我缺少一些东西;我认为是www-user调用了php脚本,我不知道默认路径。我的用户使用 .bashrc 文件中指定的路径调用 bash 文件。但是,我可能需要指定 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
如果这是正确的或如何做到这一点,有什么想法吗?谢谢。
【问题讨论】:
-
您可以试试这个,保留与 php 一起使用的行 [/home/tim/anaconda3/bin/python] 并在从 bash 脚本调用脚本时使用相同的 python 路径并调用脚本. /home/tim/anaconda3/bin/python 。值得一试!