Python OSError-错误13权限被拒绝

Python OSError-错误13权限被拒绝,python,django,apache,unix,Python,Django,Apache,Unix,我试图通过管理员页面上传图片,但它一直在说: [Errno 13] Permission denied: '/path/to/my/site/media/userfolder/2014/05/26' 上传时动态创建文件夹userfolder/2014/05/26 在回溯中,我发现在执行此命令期间发生了错误: 在/usr/lib64/python2.6/os.py第157行。打电话的时候 mkdir(name, mode) 也就是说,它无法创建任何文件夹,因为它没有这样做的权限 我在服务器中

我试图通过管理员页面上传图片,但它一直在说:

[Errno 13] Permission denied: '/path/to/my/site/media/userfolder/2014/05/26'
上传时动态创建文件夹
userfolder/2014/05/26

在回溯中,我发现在执行此命令期间发生了错误:

在/usr/lib64/python2.6/os.py第157行。打电话的时候

mkdir(name, mode) 
也就是说,它无法创建任何文件夹,因为它没有这样做的权限

我在服务器中使用OpenSuse作为操作系统。在httpd.conf中,我有:

<Directory /path/to/my/site/media>
   Order allow,deny
   Allow from all
</Directory>

命令允许,拒绝
通融

我必须吃点什么吗

您需要更改目录权限,以便web服务器进程可以更改目录

  • 要更改目录的所有权,请使用
    chown

    chown -R user-id:group-id /path/to/the/directory
    
  • 要查看哪个用户拥有web服务器进程(相应地更改
    httpd
    ):


如果文件夹名称前有斜杠,也可能发生这种情况:

path = '/folder1/folder2'

OSError: [Errno 13] Permission denied: '/folder1'
出现了一个错误,但此错误可以正常工作:

path = 'folder1/folder2'

当base.py文件中的maybe_download函数调用发出下载请求时,您可能会遇到问题

临时文件的权限存在冲突,我自己无法找到更改权限的方法,但能够解决该问题

请执行以下操作

  • 从链接()下载MNIST数据集的四个.gz文件
  • 然后创建一个名为MNIST_data的文件夹(或在tensorflow\examples文件夹中的工作目录/site packages文件夹中选择)
  • 直接将文件复制粘贴到文件夹中
  • 复制文件夹的地址(可能是 (C:\Python\Python35\Lib\site packages\tensorflow\examples\tutorials\mnist\mnist\u data))
  • 将“\”更改为“/”,因为“\”用于转义字符,以访问文件夹位置
  • 最后,如果您正在学习教程,您的调用函数将是(mnist=input\u data.read\u data\u set(“mnist\u data/”,one\u hot=True)); 将“MNIST_data/”参数更改为您的文件夹位置。就像我的例子一样(mnist=input_data.read_data_set(“C:/Python/Python35/Lib/site packages/tensorflow/examples/tutorials/mnist/mnist_data”,one_hot=True))
然后一切都结束了。
希望它对您有用。

另一个选项是确保文件不会在您机器上的任何其他位置打开。

只需尝试:

sudo cp /source /destination

只要关闭文件,以防在后台打开。错误自行消失

补充@falsetru的答案:在终端中运行id以获取用户id和组id

转到您面临挑战的目录/分区。 打开终端,键入id,然后按enter键。 这将显示您的用户id和组id

然后键入

chown-R用户标识:组标识。

替换用户id和组id

末尾的
表示当前分区/存储库


//周-R 1001:1001。(这是我的情况)

确保目录
/path/to/my/site/media
可由web服务器进程写入。
ps aux | grep apache
将向您显示进程的所有者。@falsetru这显示了
root
。这就是我的django代码,对吗?那
ps aux | grep httpd | grep-v grep
ps aux | grep apache | grep-v grep
chown-R httpd:httpd/path/to/my/site/media
(第二个
httpd
是组名。如果
httpd
的组与
httpd
不同,您需要更改它)我用的是gunicorn。我收到了同样的错误信息。我想授予gunicorn对/home/portfolio下文件夹的读/写权限。我该怎么办?@Rexford,你最好用
gevent
tag单独发布一个问题。@falsetru我通过将主文件夹及其子目录/文件的所有者更改为www数据解决了这个问题。我使用flask+apache作为后端服务器。谢谢你的指导。值得解释一下为什么会发生这种情况。Unix中文件夹名称前的
/
表示该文件夹应存在于根目录中,根目录中还包含所有主要的敏感系统文件夹,例如
/usr/
/bin/
,等等(试试看,做
cd/
,看看你在哪里着陆)。不允许普通进程修改根目录。省略前导的
/
会将文件夹默认为当前工作目录,这是非常安全的,Unix将为您提供帮助。@mjp当我试图从“folder1/”中删除第一个斜杠时,它确实起了作用,错误消失了,但我不知道该文件夹现在在哪里?那么它在哪里呢?如何访问它?thanksI在您当前的目录中创建了一个名为folder1的文件夹。这仅适用于Windows。看起来这个问题是针对Linux的。这些限制不存在。请添加更多细节,以便您的答案能够独立。您可以解释一下这是如何工作的吗?
path = 'folder1/folder2'
sudo cp /source /destination