我试图从PHP文件调用Python脚本,但当我必须加载本地库时,它失败了。如果我的PHP不加载本地库,它可以调用我的python,并且我的python脚本在手动启动时可以工作。
以下是最小(非(工作文件:
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<?php
$command = escapeshellcmd ("./getter.py") ;
$output = shell_exec ($command) ;
echo "<p>$output</p>" ;
?>
</body>
</html>
getter.py
#!/usr/bin/env python2
import got
if __name__ == "__main__" :
print "Python2 working"
其中got
是当地著名的图书馆。
当我手动启动./getter.py
时,打印正在进行,但我的网页没有显示任何内容。当我评论import got
时,网页也显示打印。
附加信息:
- 操作系统:Ubuntu 18.04.1
- 服务器网址:nginix 1.14.0
- PHP:7.2
- Python:2.7.15rc1
- 我是一个网络语言新手,所以我还不知道去bug工具
- 导入非本地库(如
os
、csv
或其他库(时没有问题 - 我试着用一个简单的
$output = shell_exec ("./getter.py") ;
代替$command = escapeshellcmd ("./getter.py") ; $output = shell_exec ($command) ;
- 我试着用
#!/usr/bin/python2
替换#!/usr/bin/env python2
- 当我要求PHP或Python给我他们当前的工作目录时,他们都会按计划返回
/var/html/www/test
中的目录
这是一个文件夹树:
├── getter.py
├── got
│ ├── __init__.py
│ ├── manager
│ │ ├── __init__.py
│ │ ├── TweetCriteria.py
│ │ └── TweetManager.py
│ └── models
│ ├── __init__.py
│ └── Tweet.py
├── index.php
├── __init__.py
└── lib
├── __init__.py
└── toto.py
非常感谢。
这实际上是由依赖性问题引起的。某些必需的库仅为某些用户安装。Nginx无法以root身份访问它,而普通用户可以。