Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中运行脚本_Python_Django_Shell_Ubuntu_Nginx - Fatal编程技术网

Python 在Django中运行脚本

Python 在Django中运行脚本,python,django,shell,ubuntu,nginx,Python,Django,Shell,Ubuntu,Nginx,我正在尝试用Django运行脚本。这个脚本需要与sudo一起运行,我已经设置了sudoers文件,以便在不输入sudo密码的情况下执行命令。当我使用默认测试服务器ie>python manage.py runserver 0.0.0.0:8000时,脚本执行没有问题。但是,在使用Nginx和uWSGI部署Django之后,该命令失败并返回响应 sudo: no tty present and no askpass program specified 是否有某种配置我错过了 我使用subproc

我正在尝试用Django运行脚本。这个脚本需要与sudo一起运行,我已经设置了sudoers文件,以便在不输入sudo密码的情况下执行命令。当我使用默认测试服务器ie>python manage.py runserver 0.0.0.0:8000时,脚本执行没有问题。但是,在使用Nginx和uWSGI部署Django之后,该命令失败并返回响应

sudo: no tty present and no askpass program specified
是否有某种配置我错过了

我使用subprocess执行脚本,Django视图中的代码如下所示:

subprocess.check_output( "sudo /path/to/file/fileName.sh", shell=True)

您需要将正在使用的用户添加到sudoers列表中:

允许用户在不提示输入密码的情况下使用该命令可以解决此问题。首先打开shell控制台并键入:

sudo-visudo

然后编辑该文件以添加到末尾:

username ALL=NOPASSWD:/fullpath/to/command,/fullpath/to/othercommand

乙二醇

john ALL=NOPASSWD:/sbin/poweroff、/sbin/start、/sbin/stop

将允许用户“john”在不提示输入密码的情况下关闭、启动和停止sudo

查看屏幕底部,查找在visudo中需要使用的按键-顺便说一下,这不是vi-并在出现任何问题的第一个迹象时退出而不保存。健康警告:损坏此文件将产生严重后果,请小心编辑


来源:

您确定uwsgi作为运行的用户也有权在不提供密码的情况下运行脚本吗?您是否检查了sudoers文件是否不包含
requirety
选项?如果您可以编写一个python代码,它将执行脚本所做的操作,并将该python代码放在您的视图中,这会更好。我已经这样做了。问题是该命令在部署的django中不起作用,哪个用户正在运行该脚本?必须将该用户添加到sudoers列表中(顺便说一句,使用sudoer用户运行web应用程序确实不安全)。运行脚本的用户与sudoers文件相同。John喜欢上面的例子。但是在正常情况下,Nginx使用“www-data”用户,如果您的脚本是自动的,因此它在一些与web相关的事件上运行,它将由www-data执行。