在php中调用python文件可以直接使用自带函数:
exec(commond,
o
u
t
p
u
t
)
接
收
一
个
命
令
,
把
得
到
的
结
果
返
给
output) 接收一个命令,把得到的结果返给
output) 接收一个命令,把得到的结果返给output
system() 直接返回输出结果,可以直接发给浏览器
passthru(command) 和system类似,还能返回二进制输出
shell_exec(command); 或者反撇号都只返回输出结果
使用方式:
/*使用这个exec执行liunx代码,
sudo是使用当前用户,
python是文件路径,
.py文件是执行文件位置,最好是绝对路径。如果.py有配置路径,那么就可以直接写文件名
$output可以打印出状态码
*/
exec('sudo /root/.pyenv/shims/python /www/wwwroot/liuliang_ht_22/public/qucela.py ',$output)
system('sudo /root/.pyenv/shims/python /www/wwwroot/liuliang_ht_22/public/qucela.py ',$output)
/*
如果使用以上方法没用数据请用以下方法看一下报错信息
2>&1 是打印出执行时的详细报错信息,因为exec和system报错一般会返回一个大于0的值,1,2,126,127,
*/
exec('sudo /root/.pyenv/shims/python /www/wwwroot/liuliang_ht_22/public/qucela.py 2>&1',$output)
system('sudo /root/.pyenv/shims/python /www/wwwroot/liuliang_ht_22/public/qucela.py 2>&1',$output)
/*
一般的报错信息有sudo的用户没有免密权限,这样就要在liunx服务器中配置用户密码
前置是知道你现在是那个用户
使用一下代码打印一下
*/
$username=system('whoami');
var_dump($username);
/*
得到服务器使用用户,一般浏览器的使用用户都是www,然后就是在服务器中为这位用户配置免密
1 打开sudoers
vi /etc/sudoers
2 添加免密码
www ALL = NOPASSWD: ALL
然后重启服务器,让配置生效
*/
/*
如果你使用以上代码执行,如果执行过程过长还是会有502报错,而且会卡死程序
&是跳过执行,直接进入进程执行
*/
pclose(popen('sudo /root/.pyenv/shims/python /www/wwwroot/liuliang_ht_22/public/qucela.py &','r'));
这个就是执行py文件会出现的问题和最简单的解决方案了
也是我个人碰到的问题和解决的思路