在Django中运行脚本[重复]
Posted
技术标签:
【中文标题】在Django中运行脚本[重复]【英文标题】:Run script in Django [duplicate] 【发布时间】:2016-08-09 20:42:55 【问题描述】:我正在尝试在 Django 中运行脚本。该脚本需要使用 sudo 运行,并且我已经设置了 sudoers 文件,以便可以在不输入 sudo 密码的情况下执行命令。当我使用默认测试服务器时,即>python manage.py runserver 0.0.0.0:8000,脚本执行没有问题。但是,使用 nginx 和 uWSGI 部署 Django 后,命令失败并返回响应
sudo: no tty present and no askpass program specified
我是否遗漏了某种配置?
我正在使用子进程执行脚本,Django视图内的代码是这样的:
subprocess.check_output( "sudo /path/to/file/fileName.sh", shell=True)
【问题讨论】:
你确定即使是运行 uwsgi 的用户也有权在不提供密码的情况下运行脚本?您是否检查过您的 sudoers 文件不包含requiretty
选项?
如果你能编写一个 python 代码来执行脚本所做的事情并将该 python 代码放在你的视图中,那就更好了。
【参考方案1】:
您需要将您正在使用的用户添加到 sudoers 列表中:
授予用户使用该命令而不提示输入密码应该可以解决问题。首先打开一个shell控制台并输入:
sudo visudo
然后编辑该文件以添加到最后:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand
例如
john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop
将允许用户 'john' 在不提示输入密码的情况下 sudo poweroff、启动和停止。
在屏幕底部查看您需要在 visudo 中使用的击键 - 顺便说一下,这不是 vi - 并在出现任何问题的第一个迹象时退出而不保存。健康警告:损坏此文件将产生严重后果,请谨慎编辑!
来源:How to fix 'sudo: no tty present and no askpass program specified' error?
【讨论】:
我已经这样做了。问题是该命令在部署的 Django 中不起作用 哪个用户正在运行脚本?必须将该用户添加到 sudoers 列表中(顺便说一句,使用 sudoer 用户运行 Web 应用程序确实不安全)。 运行脚本的用户与sudoers文件相同。约翰喜欢上面的例子。 但在正常情况下,Nginx 使用“www-data”用户,如果您的脚本是自动化的,因此它运行在一些与 Web 相关的事件上,它将由 www-data 执行。以上是关于在Django中运行脚本[重复]的主要内容,如果未能解决你的问题,请参考以下文章
python在powershell中运行脚本给出'非utf'错误[重复]
在Javascript HTML中访问Django视图中的上下文变量(列表)[重复]