使用子进程运行的程序的读/写权限?

时间:2012-10-16 11:08:50

标签: django permissions subprocess

我有一个Django应用程序,它使用subprocess.call()调用程序。这个程序创建了几个文件,然后我在我的应用程序中使用它。问题是程序似乎没有创建文件的权限。我也试过subprocess.call(['mkdir','/tmp/myapp'])这样的调用,但是没有创建目录。我需要做什么?

这只是我的dev服务器,我用

调用
sudo python manage.py runserver 0.0.0.0:8080

我可以手动从终端运行命令。

我也可以使用子进程来touch这些文件,但是当它运行访问文件本身的程序时,该程序会抛出错误,因为它不能。

1 个答案:

答案 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。 因此,还需要更改此用户的权限,以便编写和执行超出正常范围的命令。