php调用python脚本读写权限问题

本文详细记录了在PHP中调用Python脚本时遇到的权限问题,包括IOError: [Errno 13] Permission denied错误的解决方法,如使用--user参数和修改文件目录权限。还探讨了不同用户环境下Python脚本执行的差异,以及如何处理Python库安装和模块导入的问题,提供了解决ModuleNotFoundError错误的方案。
摘要由CSDN通过智能技术生成

最近有一个奇怪的需求,使用php调用python脚本,像下面这样写就可以了

exec("python 01.py 2>&1",$fh);

2>&1:可以返回脚本运行中出现的错误,建议加上不然不知道什么错误

$fh:返回脚本运行的结果,和上面一个是有区别的,如果用php调用python脚本的话后面不加2>&1 有错误也不会报出来的

注意:如果python脚本里面有读写文件的操作的话这样运行会报IOError: [Errno 13] Permission denied就是权限被拒绝

是因为被调用的python运行的时候读写文件的权限不够,但是在终端运行却没问题。不知道为什么(难道被php调用过的python脚本权限会降低???),这个时候只需要加一个--user就可以正常运行了,也就是让它有root权限,像下面这样

exec("python 01.py --user 2>&1",$fh);

2022/3/15更新

好吧上面的方法是行不通的,之前可以是因为在终端运行的时候加了-user赋予了python管理员权限,但只是暂时的时间久了会失效,找了一下还是没解决方法,最终还是修改的文件目录权限解决的。。

2023/9/19更新

又遇到这个问题了,还好当时写了篇文章来记录,用php调用python脚本的话,如果python和php脚本的目录不一致,用php调用python脚本的话是默认在php脚本的目录里,即便python没有在这个目录,也就是说如果python里面有获取当前目录的代码,然后用php调用这个python文件去运行,那么输出的会是这个php文件的目录,但是python单独运行的话那输出的就是python本来的目录了。。

2024/6/23更新

好吧又遇到了。。。莫名其妙可以了,应该是重启服务器的原因,修改一些权限还有安装python3添加环境变量,之后记得重启服务器试试。。。。

好好好,发现一个新坑,在linux上执行python相关代码的时候是分用户的,在终端下是root用户,用php 调用exec执行指令的话就是在www用户下执行的(注意宝塔面板的定时任务也是运行在一个虚拟环境),这是一点,还有就是在不同用户下执行python脚本那么都是在不同虚拟机里面执行的,这样做的好处是可以将不同用户运行环境分割开来,互不影响,好了如果执行python脚本需要安装一些库的话,如果只在终端安装的话,那么这个库就只能被运用于终端,其他用户虚拟环境下面用这个库的时候就会报ModuleNotFoundError: No module named 错误,也就是找不到这个库,想让所有用户都安装这个库,就需要在安装指令前面加上sudo才行,例如

sudo pip3 install requests

 这样系统所有用户就可以用到这个库了。

还有一种情况如果我只想让某些特定的用户安装这个库,不需要所有用户都安装,也有办法,不过还没测试,有大佬测试了的可以评论区说一下结果,参考链接:解决php中通过exec调用python脚本报ModuleNotFoundError错误 - HOTAIGC团队 - 博客园 (cnblogs.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值