判断目录是否可写
在Python中,怎么才能判断一个文件夹对执行脚本的用户来说是否可以写入呢?因为这可能需要用到os模块,所以我得提一下,我是在*unix环境下运行的。
12 个回答
28
我用tempfile
模块的解决方案:
import tempfile
import errno
def isWritable(path):
try:
testfile = tempfile.TemporaryFile(dir = path)
testfile.close()
except OSError as e:
if e.errno == errno.EACCES: # 13
return False
e.filename = path
raise
return True
更新:
在Windows上再次测试代码后,我发现使用tempfile时确实存在问题,具体可以查看issue22107: tempfile模块在Windows上错误解读访问被拒绝的错误。
如果目录是不可写的,代码会卡住几秒钟,最后抛出一个IOError: [Errno 17] 找不到可用的临时文件名
的错误。也许这就是用户2171842观察到的情况?
不幸的是,这个问题目前还没有解决,所以为了处理这个情况,必须捕捉到这个错误:
except (OSError, IOError) as e:
if e.errno == errno.EACCES or e.errno == errno.EEXIST: # 13, 17
当然,在这些情况下,延迟仍然存在。
85
这听起来可能有点奇怪,但在Python编程中,有一句常用的说法:
请求原谅比请求许可更容易。
根据这个说法,有人可能会建议:
试着往那个目录里写东西,如果没有权限的话,就捕捉到错误。
236
虽然Christophe建议的方法更符合Python的风格,但os模块确实有一个叫做os.access函数可以用来检查访问权限:
os.access('/path/to/folder', os.W_OK)
# W_OK表示写权限,R_OK表示读权限,等等。