php挪用python失败怎样办?
PHP挪用Python失败的处理方法
假定有文件:php_test.php python_test.py
正在php文件中运转Python:
exec("python python_test.py", $array, $ret);
假如运转Python犯错其实不能保留正在数组array中,因而应该把规范谬误重定向到文件中,以上代码改写以下:
exec("python python_test.py 2>error.txt", $array, $ret);
正在bash中0,1,2三个数字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即规范输出(普通是键盘),规范输入(普通是显示屏,精确的说是用户终端管制台),规范谬误(犯错信息输入)。
也能够经过如下形式将规范谬误重定向到规范输入保留到$array中:
exec("python python_test.py 2>error.txt 2>&1", $array, $ret);
而后就能够依据谬误信息去寻求处理方法。
普通正在终端经过饬令运转PHP文件是能够即刻看到谬误信息的,然而经过阅读器运转PHP文件就只能下面所述办法去输入谬误信息。因而成绩也就是正在饬令行下PHP能够胜利执行Python文件,而经过阅读器就不克不及胜利运转,这是由于两种形式所挪用的静态库纷歧致!
经过饬令行形式挪用的是零碎中的已有的静态库,而经过阅读器形式挪用的是Web效劳器中的静态库。(我装置的XAMPP,以是经过阅读器形式挪用的就是lampp/lib中的静态库)。
处理方法:
1.正在输入的谬误信息中找到犯错的静态库
2.经过locate饬令找到相干的静态库所正在的地位:locate libxxx.so
3.将web效劳器中的同名静态库删除了或重定名
4.将经过第2步正在零碎中找到的静态库链接到web效劳器的lib目次中
实例:
Python中应用hashlib模块时可能呈现两个谬误:
<span style="font-family:Arial, Helvetica, sans-serif;">relocation error: python: symbol OpenSSL_add_all_digests, version OPENSSL_1.0.0 not defined in file libcrypto.so.1.0.0 with link time reference</span> <span style="font-family:Arial, Helvetica, sans-serif;">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)</span>
1.找出零碎中蕴含libcrypto.so.1.0.0的一切门路:locate libcryto.so.1.1
/home/ubuntu/.cache/vmware/drag_and_drop/52091a33-81b7-cc30-d88c-574c47558e32/ndk/libimobiledevice-android-master/openssl/libcrypto.so.1.0.0 /home/ubuntu/.cache/vmware/drag_and_drop/52091a33-81b7-cc30-d88c-574c47558e32/ndk/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.将零碎中libcryto.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处理步骤同上。
更多PHP相干常识,请拜访PHP教程!
以上就是php挪用python失败怎样办的具体内容,更多请存眷资源魔其它相干文章!
抱歉,评论功能暂时关闭!