0
点赞
收藏
分享

微信扫一扫

用python打开文件获取文件属性时,运行报错PermissionError: [Errno 13] Permission denied: 'temp'以及os.symlink()出错

一:概述

在开发中我们经常会使用python程序去对物理主机平台上的文件进行操作,在这里说明一下,python中获取文件属性时,运行出现的错误。

二:具体说明

<1>获取文件属性的代码

import os
# 创建一个临时目录
temp_dir = 'temp'
os.mkdir(temp_dir)

# 在临时目录中创建一个文件
temp_file = os.path.join(temp_dir, 'test.txt')
with open(temp_file, 'w') as f:
    f.write('test')
# 设置文件的读取权限
# os.chmod('test.txt', 0o777)
# os.chmod('temp', 0o777)
# 获取临时目录文件描述符
# Linux和MacOS中
dir_fd = os.open(temp_dir, os.O_RDONLY)
# 使用dir_fd参数获取文件属性信息
file_info = os.stat("test.txt",dir_fd=dir_fd)
print(f"file size:{file_info.st_size}")

# 关闭文件描述符
os.close(dir_fd)

# 删除临时文件和目录
os.remove(temp_file)
os.rmdir(temp_dir)

# 创建符号链接
os.symlink('test.txt', 'test_link.txt')

# 获取链接文件指向源文件的属性
file_info = os.stat('test_link.txt')
print(f"file size:{file_info.st_size}")

# 获取链接文件本身的属性
file_info = os.stat('test_link.txt', follow_symlinks=False)
print(f"Link file size:{file_info.st_size}")

# 删除符号链接
os.unlink('test_link.txt')

运行之后,出现错误爆出了以下的错误。

用python打开文件获取文件属性时,运行报错PermissionError: [Errno 13] Permission denied:

这个错误说明的是权限错误。

<2>解决办法1

百度搜索之后,看到了一个解决办法就是利用os.chmod函数去赋予这个权限。尝试使用这个办法解决。

修改的代码如下:

import os
# 创建一个临时目录
temp_dir = 'temp'
os.mkdir(temp_dir)

# 在临时目录中创建一个文件
temp_file = os.path.join(temp_dir, 'test.txt')
with open(temp_file, 'w') as f:
    f.write('test')
# 设置文件的读取权限
os.chmod('test.txt', 0o777)
os.chmod('temp', 0o777)
# 获取临时目录文件描述符
# Linux和MacOS中
dir_fd = os.open(temp_dir, os.O_RDONLY)
# 使用dir_fd参数获取文件属性信息
file_info = os.stat("test.txt",dir_fd=dir_fd)
print(f"file size:{file_info.st_size}")

# 关闭文件描述符
os.close(dir_fd)

# 删除临时文件和目录
os.remove(temp_file)
os.rmdir(temp_dir)

# 创建符号链接
os.symlink('test.txt', 'test_link.txt')

# 获取链接文件指向源文件的属性
file_info = os.stat('test_link.txt')
print(f"file size:{file_info.st_size}")

# 获取链接文件本身的属性
file_info = os.stat('test_link.txt', follow_symlinks=False)
print(f"Link file size:{file_info.st_size}")

# 删除符号链接
os.unlink('test_link.txt')

按照说的去修改权限,运行之后发现还是错误的。一开始以为是权限这个块通过代码可能出错了,然后手动通过修改权限,运行试试。

手动修改权限的的方法,打开创建的指定目录,右键点击该文件夹,然后点击属性

用python打开文件获取文件属性时,运行报错PermissionError: [Errno 13] Permission denied:

接着去将常规里面的属性只读不勾选。然后就完成了。

用python打开文件获取文件属性时,运行报错PermissionError: [Errno 13] Permission denied:

通过这个再去运行一下,然后运行之后还是报错了。想来这解决办法不是解决这个的。

注意:最后通过查看视频,发现,这个运行错误的原因是,在Linux平台上,Macos,Linux台上这个使用方法是不一样的。这个os.open()函数在Linux和MacOS平台上可以将目录打开,在Windows平台上使用os.open函数打开目录时会爆出权限错误。

<3>解决办法2

对代码进行修改,将文件路径直接修改为目录名,修改后的代码如下:

import os
# 创建一个临时目录
temp_dir = 'temp'
os.mkdir(temp_dir)

# 在临时目录中创建一个文件
temp_file = os.path.join(temp_dir, 'test.txt')
with open(temp_file, 'w') as f:
    f.write('test')

# # 获取临时目录文件描述符
# dir_fd = os.open(temp_dir, os.O_RDONLY)
# 使用dir_fd参数获取文件属性信息
file_info = os.stat(temp_file)
print(f"file size:{file_info.st_size}")

# 删除临时文件和目录
os.remove(temp_file)
os.rmdir(temp_dir)

# 创建符号链接
os.symlink('test.txt', 'test_link.txt')

# 获取链接文件指向源文件的属性
file_info = os.stat('test_link.txt')
print(f"file size:{file_info.st_size}")

# 获取链接文件本身的属性
file_info = os.stat('test_link.txt', follow_symlinks=False)
print(f"Link file size:{file_info.st_size}")

# 删除符号链接
os.unlink('test_link.txt')

运行之后,发现这个问题解决了。

用python打开文件获取文件属性时,运行报错PermissionError: [Errno 13] Permission denied:

<4>上面这个问题知道原因之后,解决了,但是随之又出现了另一个问题。

Traceback (most recent call last):
  File "D:\PyCharmProjects\Python-knowledges\file_system\stat_demo_windows.py", line 35, in <module>
    os.symlink('test.txt', 'test_link.txt')
OSError: symbolic link privilege not held

这个问题是软连接不能被授予权限。我的电脑暂时还没解决。这个问题找了找,发现是我的电脑的问题。解决办法比较麻烦。解决链接如下。我使用的电脑是Win10的家庭版本,如果你使用的是其他系统的电脑说不定就不会出现这个问题,如果出现了这个错误。我个人认为只要知道原因就可以了。直接在Linux系统中就不会出现这个错误。在这个问题上花费太多的时间意义不大。主要是知道有这个错误和这个知识点。

注意:在Windos环境下,symlink这个函数参数中的源文件和符号链接都必须要使用绝对路径。

软连接授予权限问题




举报

相关推荐

0 条评论