我有一个Django应用程序,它使用subprocess.call()
调用程序。这个程序创建了几个文件,然后我在我的应用程序中使用它。问题是程序似乎没有创建文件的权限。我也试过subprocess.call(['mkdir','/tmp/myapp'])
这样的调用,但是没有创建目录。我需要做什么?
这只是我的dev服务器,我用
调用sudo python manage.py runserver 0.0.0.0:8080
我可以手动从终端运行命令。
我也可以使用子进程来touch
这些文件,但是当它运行访问文件本身的程序时,该程序会抛出错误,因为它不能。
答案 0 :(得分:1)
首先需要创建/ tmp / myapp目录。如果您在Django中的视图功能没有显示错误,则表示您没有正确捕获它。 尝试这样的事情:
response = HttpResponse()
calltxt = subprocess.call(['mkdir','/tmp/myapp'])
response.content = calltxt
return response
将该函数附加到urls.py并将其加载到浏览器中。 0表示命令执行成功,1表示错误(这类似于Bash中的$!变量)。
我认为情况并非如此,但如果您的Django应用程序部署在Web服务器中,那么创建文件并从Python环境执行命令的用户就是拥有Web服务器守护程序的用户。例如Apache中的www-data。 因此,还需要更改此用户的权限,以便编写和执行超出正常范围的命令。