在Django中运行脚本

时间:2016-04-18 08:03:42

标签: python django shell ubuntu nginx

我正在尝试在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)

1 个答案:

答案 0 :(得分:0)

您需要将您正在使用的用户添加到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?