php运行python脚本失败怎么解决

假设有文件:php_test.php python_test.py
Python在php文件中运行:
exec("pythonpython_test.py",$array,$ret);若运行Python错误不能保存在数组aray中,则应将标准错误重新定位到文件中,上述代码重写如下:
exec("pythonpython_test.py2>error.txt",$array,$ret);代表STDIN__在bash中0、1、2三个数字FILENO、STDOUT_FILENO、STDERR_FILENO,也就是说,标准输入(通常是键盘)、标准输出(通常是显示屏,准确地说是用户终端控制台)、标准错误(错误信息输出)。您也可以通过以下方式将标准错误重新定位到$aray中:
exec("pythonpython_test.py2>error.txt2>&1",$array,$ret);然后你可以根据错误的信息找到解决办法。
相关推荐:Python教程
一般来说,当PHP文件通过命令在终端上运行时,您可以立即看到错误信息,但当PHP文件通过浏览器运行时,您只能通过上述方法输出错误信息。因此,问题是PHP可以在命令行下成功执行Python文件,但由于两种方法调用的动态库不一致,因此无法通过浏览器成功运行!命令行调用系统中现有的动态库,Web服务器中的动态库通过浏览器调用。(我安装了XAMPP,所以我通过浏览器调用了LAMP/lamp。
解决办法:
1、在输出的错误信息中找到错误的动态库。
2、通过locate命令找到相关动态库的位置:locate libxxx.so。
3、删除或重新命名web服务器中的同名动态库。
4、将在系统中找到的动态库链接到web服务器的lib目录中。
实例:
使用hashlib模块时,Python可能会出现两个错误:
relocationerror:python:symbolOpenSSL_add_all_digests,versionOPENSSL_1.0.notdefinedinfile libcrypto.so.1.0.0 withlinktimereference
python: /opt/lampp/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.2' not found (required by /opt/lampp/lib/libssl.so.1.0.0)
1.发现系统中包含libcryptoo.so.1.0.0的所有路径:locate libcryto.so.1.1
/home/ubuntu/.cache/vmware/drag_and_drop52091a33-81b7-cc30-d88c-574c47558e32ndk/libimobiledevice-android-master/ openssl/libcrypto.so.1.0.0 /home/ubuntu/.cache/vmware/drag_and_drop52091a33-81b7-cc30-d88c-574c47558e32ndk/libimobiledevice-android-master/ out/fsroot/lib/libcrypto.so.1.0.0 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /opt/lampp/lib/libcrypto.so.1.0.0
2.重命名web服务器中的同名动态库:sudo mv /opt/lampp/lib/libcryto.so.1.1 /opt/lampp/lib/libcryto.so.1.1.bak
3.libcrytoyto在系统中.so.1.1链接到web服务器的lib目录:sudo ln -s /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /opt/lampp/lib/libcryto.so.1.1
libssl.so.1.0.0同上解决步骤。
