问题:自己通过命令行执行python正常,但通过php调用就没有反应。
解决方法:
1、首先检查一下php有没有执行权限,简单粗暴的:
sudo chmod 777 xxx.php
2、Python如果有中文返回,似乎需要额外操作。可以先去掉中文排除掉其他原因,也可以尝试以下操作:
在python文件头部加上
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
或者,php脚本中在调用python命令的地方加上:
// 设置字符集,重要!!!! 非常重要。
$set_charset = 'export LANG=en_US.UTF-8;';
$cmd = "python3 main.py gen --model-path='checkpoints/tang_199.pth' --pickle-path='tang.npz' --start-words='".$start_words."' --prefix-words='".$prefix_words."' --use-gpu=False --acrostic='True'";
//echo $cmd;
$poem = exec( $set_charset.$cmd, $output, $res );
3、如果不行,则将php调用语句的最后面加上2>&1,如
echo shell_exec("python3 xxx.py 2>&1");
这样,再去网页执行php时候,就会显示具体的错误原因。
4、如果是普通语法错误,修改即可;但如果提示No module,是因为你当前登录账户(非root)的环境,跟web的环境不一样,所以你通过ssh安装的库,在web下找不到。可以通过加sudo -H来解决,如:
sudo -H pip3 install pyDes
解决方法:
1、首先检查一下php有没有执行权限,简单粗暴的:
sudo chmod 777 xxx.php
2、Python如果有中文返回,似乎需要额外操作。可以先去掉中文排除掉其他原因,也可以尝试以下操作:
在python文件头部加上
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
或者,php脚本中在调用python命令的地方加上:
// 设置字符集,重要!!!! 非常重要。
$set_charset = 'export LANG=en_US.UTF-8;';
$cmd = "python3 main.py gen --model-path='checkpoints/tang_199.pth' --pickle-path='tang.npz' --start-words='".$start_words."' --prefix-words='".$prefix_words."' --use-gpu=False --acrostic='True'";
//echo $cmd;
$poem = exec( $set_charset.$cmd, $output, $res );
3、如果不行,则将php调用语句的最后面加上2>&1,如
echo shell_exec("python3 xxx.py 2>&1");
这样,再去网页执行php时候,就会显示具体的错误原因。
4、如果是普通语法错误,修改即可;但如果提示No module,是因为你当前登录账户(非root)的环境,跟web的环境不一样,所以你通过ssh安装的库,在web下找不到。可以通过加sudo -H来解决,如:
sudo -H pip3 install pyDes