【解决】Apache2+Django处理http请求时python调用shell不执行问题

问题描述

使用场景

在使用Ubuntu18.04+Apache2+Django2.1.7+Python3.6.9处理http提交的请求时,定义的函数需要调用起服务器的shell,以便进行openSMILE提取特征,若正常则会生成一个csv文件。

问题出现

执行函数status = os.system(cmd)时,打印出status=32512,并且没有生成对应的csv文件。

原因分析

查询得知,status=32512对应os的code为127,表示未定义的操作。

  • 首先,openSMILE安装在/home下,项目在/home/WebServer下,单独运行某一个py文件时正常执行
  • 其次,考虑文件权限问题,改变home及其所含文件权限为777之后并未解决问题,但能肯定是权限问题导致

解决办法

思路:给apache单独添加一个用户,让它具有sudo权限以便执行命令,同时不用输入密码

  1. 在/etc/apache2/apache2.conf中,找到
# These need to be set in /etc/apache2/envvars
User ${xxxx}
Group ${xxxx}

并更改为

# These need to be set in /etc/apache2/envvars
User apache
Group apache
  1. 创建ubuntu新用户
adduser apache
...# 一堆设置,默认就会
passwd apache
...# 定义用户密码
  1. 更改文件权限
chmod -v u+w /etc/sudoers
  1. 打开sudoers文件并添加内容
vim /etc/sudoers
# 找到Allow root to run any commands 类似定义的部分
root	ALL=(ALL)	ALL
# 在下面添加一行
apache	ALL=(ALL)	NOPASSWD:ALL
  1. 恢复文件权限
chmod -v u-w /etc/sudoers
  1. 在源代码的cmd部分加上sudo

结束,执行成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值