检查您是否拥有目录权限的东西

时间:2019-03-13 15:49:30

标签: python

我正在编写一个python程序,现在我正在处理异常情况。

while True:
    try:
        os.makedirs("{}\\test".format(dest))
    except PermissionError:
        print("Upewnij sie ze masz dostep do podanego katalogu")
        print("Sprobuj ponownie podac miejsce docelowe: ", end='')
        dest = input()
        continue
    break

我有这个,但是以后我将需要删除我创建的这个文件夹。 有人可以告诉我如何做得更容易吗?

2 个答案:

答案 0 :(得分:2)

我认为您想要的是os.access

  

os.access(路径,模式,*,dir_fd =无,有效ID = False,follow_symlinks =真实)

     

使用真实的uid / gid测试对路径的访问。请注意,大多数操作将使用有效的uid / gid,因此可以在suid / sgid环境中使用此例程来测试调用用户是否具有对路径的指定访问权限。 mode应该为F_OK以测试路径是否存在,或者可以为R_OK,W_OK和X_OK中的一个或多个以包含或测试权限。如果允许访问,则返回True;否则,则返回False。

例如:

os.access("/path", os.R_OK)

该模式包含:

os.F_OK   # existence
os.R_OK   # readability
os.W_OK   # writability
os.X_OK   # executability

引用:https://docs.python.org/3.7/library/os.html#os.access

答案 1 :(得分:2)

不要。

几乎永远不值得验证您是否有权执行程序所需的操作。一方面,权限不是失败的唯一可能原因。例如,删除也可能由于另一个程序的文件锁定而失败。除非您有非常的充分理由,否则只需编写代码以 try 进行操作,然后在失败时中止操作,就会更高效,更可靠: >

import shutil

try:
    shutil.rmtree(path_to_remove) # Recursively deletes directory and files inside it
except Exception as ex:
    print('Failed to delete directory, manual clean up may be required: {}'.format(path_to_remove))
    sys.exit(1)


与您的代码有关的其他问题

  • 使用os.path.join串联文件路径:os.makedirs(os.path.join(dest, test))。这将为操作系统使用适当的目录分隔符。
  • 您为什么循环失败?在现实世界的程序中,简单地中止整个操作会更简单,通常可以带来更好的用户体验。
  • 您确定要查找tempfile库吗?它允许您向操作系统的标准临时位置吐出唯一目录:

    import tempfile
    
    with tempfile.TemporaryDirectory() as tmpdir:
        some_function_that_creates_several_files(tmpdir)
        for f in os.walk(tmpdir):
             # do something with each file
    # tmpdir automatically deleted when context manager exits
    
    # Or if you really only need the file
    with tempfile.TemporaryFile() as tmpfile:
        tmpfile.write('my data')
        some_function_that_needs_a_file(tmpfile)
    # tmpfile automatically deleted when context manager exits