我有一个用于运行张量流模型的python脚本,我需要使用PHP shell_exec
函数从PHP文件(出于复杂原因)运行此脚本。当我使用以下代码运行python文件时:
$command = 'cd testModels/crosswalkPredict && . activate keras && python test_script.py';
$output = shell_exec($command);
我收到以下错误:Illegal instruction (core dumped)
我读到,当CPU不支持Tensorflow较新版本中的指令时,通常会出现此问题。所以我降级到Tensorflow 1.5。
但是,当我直接从终端运行cd testModels/crosswalkPredict && . activate keras && python test_script.py
时,不会发生此错误;仅当我从PHP shell_exec
函数中运行它时才会发生。
我只尝试了以下几行来尝试python脚本:
import tensorflow
print('Hello!')
它仍然会给出相同的错误,所以我知道当我要做的只是导入tensorflow并使用shell_exec
运行脚本时,就会发生此问题。
可能是什么问题?
答案 0 :(得分:0)
这是一个已知的TensorFlow兼容性问题,在较旧的CPU上具有AVX支持,如果从源代码编译TensorFlow,则可以解决此问题:
https://github.com/tensorflow/tensorflow/issues/17411#issuecomment-386888244
https://github.com/tensorflow/tensorflow/issues/17411#issuecomment-420157421
答案 1 :(得分:0)
我发现了问题所在。正如我在几条评论中提到的那样,我正在使用python虚拟环境。当我从命令行执行python脚本时,正在使用python虚拟环境中的python解释器,一切都很好。每当我执行脚本rom shell_exec
时,都会使用python解释器的默认安装,这就是发生错误的地方。
我在使用python虚拟环境方面经验不是很丰富,所以这很可能就是为什么我花了这么长时间才了解这个问题的原因。幸运的是,MohammedAyoubBENJELLOUN关于使用默认的python安装的shell_exec的评论使我走上了正确的道路,我从那里弄清楚了。
为解决此问题,我只是在python虚拟环境内部的解释器的路径上调用了python解释器,而不是尝试激活虚拟环境然后执行。
例如,我用过:
/home/user01/anaconda3/envs/keras/bin/python test_script.py
代替:
. activate keras && python test_script.py