鱼C论坛

 找回密码
 立即注册
查看: 4427|回复: 18

关于代码引起的权限不足的问题的询问

[复制链接]
发表于 2021-6-9 15:43:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 fc5igm 于 2021-6-10 20:27 编辑

使用os.walk可以访问磁盘根目录,但是使用下面自定义函数的代码访问磁盘根目录则会显示权限相关的报错(对磁盘根目录下的子目录使用则没有问题)。
请问这是怎么回事?
def search():
    import os
    index_path=input('请输入待查找的初始目录:')
    os.chdir(index_path)
    f=open('vedioList.txt','w')
    def open_file():
        for i in os.listdir():
            if os.path.splitext(i)[1] in ['.mp4','.rmvb','.avi']:
                f.writelines(str(os.getcwd())+os.sep+i+'\n')
            if os.path.isdir(i):
                os.chdir(i)
                open_file()
                os.chdir(os.pardir)
    open_file()
    f.close()
search()
===================== RESTART: D:\python\works\特异性文件类型搜索.py ====================
请输入待查找的初始目录:D:\
Traceback (most recent call last):
  File "D:\python\works\特异性文件类型搜索.py", line 16, in <module>
    search()
  File "D:\python\works\特异性文件类型搜索.py", line 14, in search
    open_file()
  File "D:\python\works\特异性文件类型搜索.py", line 12, in open_file
    open_file()
  File "D:\python\works\特异性文件类型搜索.py", line 11, in open_file
    os.chdir(i)
PermissionError: [WinError 5] 拒绝访问。: 'S-1-5-18'
>>> for root, dirs, files in os.walk('D:\\', topdown=True):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

        
D:\1234.txt
D:\out.log
D:\ReadMe.txt
D:\$RECYCLE.BIN
D:\30b1efe61c9c9b4684d312175e6563f1
D:\Epic
D:\Origin
D:\Program Files
D:\Program Files (x86)
D:\PyCharm 2021.1.2
D:\python
D:\Riot Games
D:\steam
D:\System Volume Information
D:\Unigame
D:\WindowsApps
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-9 15:51:23 | 显示全部楼层
这有个例子你可以看看,如果是权限不足可以使用异常处理检查异常跳过
import os


def search_file(start_dir, target):
    try:
        os.chdir(start_dir)

        for each_file in os.listdir(os.curdir):
            if each_file == target:
                print(os.getcwd() + os.sep + each_file)  # 使用os.sep是程序更标准
            if os.path.isdir(each_file):
                search_file(each_file, target)  # 递归调用
                os.chdir(os.pardir)  
    except PermissionError:
        pass    # 如果没有权限访问就跳过


start_dir = input('请输入待查找的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir, target)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 15:55:12 | 显示全部楼层
还有一种方法,吧检查的所有文件夹的写入读取、完全控制权限全部勾上,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 16:11:37 | 显示全部楼层
本帖最后由 jackz007 于 2021-6-9 16:42 编辑

        没有权限,那是操作系统不允许访问,这个限制任何人都无法逾越,唯一的解决方法是绕过这样的目录,也就是在访问子目录出现错误的情况下,立即放弃对该子目录访问,不至于因为无权限访问一个子目录,而导致整个脚本在运行中夭折,用楼上的代码试试看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 16:41:00 | 显示全部楼层


将 Python 以管理员身份打开,然后执行代码试试看

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 16:43:02 | 显示全部楼层
jackz007 发表于 2021-6-9 16:11
没有权限,那是操作系统不允许访问,这个限制任何人都无法逾越,唯一的解决方法是绕过这样的目录, ...

用户是可以访问的。但是用python则无法访问。怎么对python授权呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 16:51:19 | 显示全部楼层
本帖最后由 fc5igm 于 2021-6-9 16:52 编辑
jackz007 发表于 2021-6-9 16:11
没有权限,那是操作系统不允许访问,这个限制任何人都无法逾越,唯一的解决方法是绕过这样的目录, ...


看了下应该是因为访问磁盘根目录所以说权限不足。请问这种情况应该怎么解决?磁盘下子目录都可以访问。
Traceback (most recent call last):
  File "D:\python\works\test.py", line 16, in <module>
    search()
  File "D:\python\works\test.py", line 15, in search
    open_file()
  File "D:\python\works\test.py", line 12, in open_file
    os.chdir(i)
PermissionError: [WinError 5] 拒绝访问。: 'System Volume Information'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 16:52:26 | 显示全部楼层
Twilight6 发表于 2021-6-9 16:41
将 Python 以管理员身份打开,然后执行代码试试看

请问有没有什么办法可以让python访问磁盘根目录下的文件?我这里访问的时候会显示权限不足
Traceback (most recent call last):
  File "D:\python\works\test.py", line 16, in <module>
    search()
  File "D:\python\works\test.py", line 15, in search
    open_file()
  File "D:\python\works\test.py", line 12, in open_file
    os.chdir(i)
PermissionError: [WinError 5] 拒绝访问。: 'System Volume Information'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 17:01:51 | 显示全部楼层
fc5igm 发表于 2021-6-9 16:52
请问有没有什么办法可以让python访问磁盘根目录下的文件?我这里访问的时候会显示权限不足


把 Python 解释器的权限调整下试试?

去 Python 安装目录下找到 Python.exe 右击属性,然后有个安全菜单栏,权限给他全勾上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 17:50:34 | 显示全部楼层
Twilight6 发表于 2021-6-9 17:01
把 Python 解释器的权限调整下试试?

去 Python 安装目录下找到 Python.exe 右击属性,然后有个安全 ...

都给过授权了还是不行。对python整个文件夹授权被反馈拒绝访问。然后我点进去单独对每一个一级子文件夹和子文件做的授权。结果仍然无法访问磁盘根目录。
请输入待查找的初始目录:I:\
Traceback (most recent call last):
  File "D:\python\works\test.py", line 16, in <module>
    search()
  File "D:\python\works\test.py", line 14, in search
    open_file()
  File "D:\python\works\test.py", line 12, in open_file
    open_file()
  File "D:\python\works\test.py", line 11, in open_file
    os.chdir(i)
PermissionError: [WinError 5] 拒绝访问。: 'S-1-5-18'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 21:52:35 | 显示全部楼层
fc5igm 发表于 2021-6-9 17:50
都给过授权了还是不行。对python整个文件夹授权被反馈拒绝访问。然后我点进去单独对每一个一级子文件夹和 ...

你去将 Python.exe 里面的属性 --> 安全选项截图发我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 22:40:02 | 显示全部楼层
Twilight6 发表于 2021-6-9 21:52
你去将 Python.exe 里面的属性 --> 安全选项截图发我看看

QQ截图20210609223915.jpg QQ截图20210609223924.jpg QQ截图20210609223929.jpg QQ截图20210609223936.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 22:43:27 | 显示全部楼层



好吧 这我也不懂是什么情况了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 22:58:25 | 显示全部楼层
Twilight6 发表于 2021-6-9 22:43
好吧 这我也不懂是什么情况了

  你的python‘可以访问磁盘分区根目录么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-9 23:02:14 | 显示全部楼层
fc5igm 发表于 2021-6-9 22:58
你的python‘可以访问磁盘分区根目录么?


没问题~

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-9 23:15:47 | 显示全部楼层
本帖最后由 fc5igm 于 2021-6-9 23:19 编辑


奇怪了,我试了下os.walk函数,也可以遍历磁盘根目录。那应该是是我代码写错了?
但是这个代码用于子目录的搜索就没有问题啊
def search():
    import os
    index_path=input('请输入待查找的初始目录:')
    os.chdir(index_path)
    f=open('vedioList.txt','w')
    def open_file():
        for i in os.listdir():
            if os.path.splitext(i)[1] in ['.mp4','.rmvb','.avi']:
                f.writelines(str(os.getcwd())+os.sep+i+'\n')
            if os.path.isdir(i):
                os.chdir(i)
                open_file()
                os.chdir(os.pardir)
    open_file()
    f.close()
search()
===================== RESTART: D:\python\works\特异性文件类型搜索.py ====================
请输入待查找的初始目录:D:\
Traceback (most recent call last):
  File "D:\python\works\特异性文件类型搜索.py", line 16, in <module>
    search()
  File "D:\python\works\特异性文件类型搜索.py", line 14, in search
    open_file()
  File "D:\python\works\特异性文件类型搜索.py", line 12, in open_file
    open_file()
  File "D:\python\works\特异性文件类型搜索.py", line 11, in open_file
    os.chdir(i)
PermissionError: [WinError 5] 拒绝访问。: 'S-1-5-18'
>>> for root, dirs, files in os.walk('D:\\', topdown=True):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

        
D:\1234.txt
D:\out.log
D:\ReadMe.txt
D:\$RECYCLE.BIN
D:\30b1efe61c9c9b4684d312175e6563f1
D:\Epic
D:\Origin
D:\Program Files
D:\Program Files (x86)
D:\PyCharm 2021.1.2
D:\python
D:\Riot Games
D:\steam
D:\System Volume Information
D:\Unigame
D:\WindowsApps
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-10 05:03:01 From FishC Mobile | 显示全部楼层
fc5igm 发表于 2021-6-9 16:43
用户是可以访问的。但是用python则无法访问。怎么对python授权呢?

Windows系统的话,右键,以管理员权限运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-10 20:23:13 | 显示全部楼层
顶帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-11 15:25:04 | 显示全部楼层
顶帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 12:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表