fc5igm 发表于 2021-6-9 15:43:54

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

本帖最后由 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) 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: 拒绝访问。: '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

fish_nian 发表于 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)

fish_nian 发表于 2021-6-9 15:55:12

{:10_256:}还有一种方法,吧检查的所有文件夹的写入读取、完全控制权限全部勾上,

jackz007 发表于 2021-6-9 16:11:37

本帖最后由 jackz007 于 2021-6-9 16:42 编辑

      没有权限,那是操作系统不允许访问,这个限制任何人都无法逾越,唯一的解决方法是绕过这样的目录,也就是在访问子目录出现错误的情况下,立即放弃对该子目录访问,不至于因为无权限访问一个子目录,而导致整个脚本在运行中夭折,用楼上的代码试试看。

Twilight6 发表于 2021-6-9 16:41:00



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

fc5igm 发表于 2021-6-9 16:43:02

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

用户是可以访问的。但是用python则无法访问。怎么对python授权呢?

fc5igm 发表于 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: 拒绝访问。: 'System Volume Information'

fc5igm 发表于 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: 拒绝访问。: 'System Volume Information'

Twilight6 发表于 2021-6-9 17:01:51

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


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

去 Python 安装目录下找到 Python.exe 右击属性,然后有个安全菜单栏,权限给他全勾上

fc5igm 发表于 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: 拒绝访问。: 'S-1-5-18'

Twilight6 发表于 2021-6-9 21:52:35

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

你去将 Python.exe 里面的属性 --> 安全选项截图发我看看

fc5igm 发表于 2021-6-9 22:40:02

Twilight6 发表于 2021-6-9 21:52
你去将 Python.exe 里面的属性 --> 安全选项截图发我看看

Twilight6 发表于 2021-6-9 22:43:27

fc5igm 发表于 2021-6-9 22:40




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

fc5igm 发表于 2021-6-9 22:58:25

Twilight6 发表于 2021-6-9 22:43
好吧 这我也不懂是什么情况了

你的python‘可以访问磁盘分区根目录么?

Twilight6 发表于 2021-6-9 23:02:14

fc5igm 发表于 2021-6-9 22:58
你的python‘可以访问磁盘分区根目录么?


没问题~

fc5igm 发表于 2021-6-9 23:15:47

本帖最后由 fc5igm 于 2021-6-9 23:19 编辑

Twilight6 发表于 2021-6-9 23:02
没问题~

奇怪了,我试了下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) 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: 拒绝访问。: '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

dragon_xiao 发表于 2021-6-10 05:03:01

fc5igm 发表于 2021-6-9 16:43
用户是可以访问的。但是用python则无法访问。怎么对python授权呢?

Windows系统的话,右键,以管理员权限运行

fc5igm 发表于 2021-6-10 20:23:13

顶帖

fc5igm 发表于 2021-6-11 15:25:04

顶帖
页: [1]
查看完整版本: 关于代码引起的权限不足的问题的询问