问题描述
我为此问题创建了聊天记录:此处
I've created a chat for this question: here
我有一个试图执行f = open('textfile.txt', 'w')
的视图,但是在我的活动服务器上,这会引发错误[Errno 13] Permission denied: 'textfile.txt'
.
I have a view that attempts to execute f = open('textfile.txt', 'w')
but on my live server this brings up the error [Errno 13] Permission denied: 'textfile.txt'
.
我的文件结构如下:
- root
|
- project
|
- app
|
- media
视图位于app
的位置.
我尝试将textfile.txt驻留在根目录,项目,应用程序和媒体中,所有这些文件均具有777文件权限(所有者,组和公众可以读取,写入和执行)[* 1].
I have tried having textfile.txt live in root, project, app and media all of which have 777 file permissions (owner, group and public can read, write and execute)[*1].
如果我将命令更改为读取权限,即f = open('textfile.txt', 'r')
,我将收到相同的错误.
If I change the command to a read permission ie f = open('textfile.txt', 'r')
I get the same error.
我的媒体根目录设置为os.path.join(os.path.dirname(__file__), 'media').replace('\\','/')
并且所有这些都通过webfaction在apache服务器上运行.
My media root is set to os.path.join(os.path.dirname(__file__), 'media').replace('\\','/')
and this is all running on an apache server through webfaction.
所以我有两个问题. django/python在哪里尝试从中打开此文件?以及需要进行哪些更改才能获得视图打开和写入文件的权限.
So I have two questions. Where is django/python trying to open this file from? and what do I need to change to get permission for the view to open and write to the file.
[* 1]我知道这不是一个好主意,我只是出于当前调试目的而设置了此设置.
[*1] I know this is not a good idea, I just have this set for current debugging purposes.
我不知道这是否相关,但是现在当我将其更改为f = open(os.path.join(settings.MEDIA_URL, 'textfile.txt'), 'r')
而不是f = open(os.path.join(settings.MEDIA_URL, 'textfile.txt'), 'w')
时,出现错误[Errno 2] No such file or directory
.
I don't know if this is relevant but now when I change it to f = open(os.path.join(settings.MEDIA_URL, 'textfile.txt'), 'r')
rather than f = open(os.path.join(settings.MEDIA_URL, 'textfile.txt'), 'w')
I get the error [Errno 2] No such file or directory
.
我不知道这是否有意义...
I don't know if this has meaning or not...
推荐答案
给出以下内容:
f = open('textfile.txt', 'w')
应该在与当前场景中正在运行的脚本__file__
或views.py
相同的目录中创建文件.
It should be creating the file in same directory as __file__
, the currently running script or views.py
in your scenario.
但是,最好明确一些,从而排除任何潜在的偏差.我建议将该行更改为:
However, it's better to be explicit, and therefore rule out any potential deviations. I'd recommend changing that line to:
import os
f = open(os.path.join(os.path.dirname(__file__), 'textfile.txt'), 'w')
甚至更好,例如:
import os
from django.conf import settings
f = open(os.path.join(settings.MEDIA_ROOT, 'textfile.txt'), 'w')
然后,您总是可以完全确定 保存文件的位置,这将使您可以更适当地优化权限.或者,您可以使用PROJECT_ROOT
.
Then, you're always assured exactly where the file is being saved, which should allow you to optimize your permissions more appropriately. Alternatively, you can use a PROJECT_ROOT
.
这篇关于尝试从视图写入文件时,权限被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!