使用python检查ntfs文件系统中的写入权限
我需要写入几个文件,这些文件通常需要比普通用户更高级别的权限。在做任何事情之前,我想检查一下当前用户是否可以全部写入。如果是,请继续书写。否则会警告用户并要求首先检查用户级权限 在nix系统中,比如Linux和Mac OS,我可以依赖于使用python检查ntfs文件系统中的写入权限,python,windows,file-permissions,ntfs,Python,Windows,File Permissions,Ntfs,我需要写入几个文件,这些文件通常需要比普通用户更高级别的权限。在做任何事情之前,我想检查一下当前用户是否可以全部写入。如果是,请继续书写。否则会警告用户并要求首先检查用户级权限 在nix系统中,比如Linux和Mac OS,我可以依赖于OS.access,但在Windows上似乎根本不起作用。它告诉我文件总是有写权限,但是在继续写的过程中,我遇到了一个意外的PermissionError异常——PermissionDenied。 我看到StackOverflow链接指向win32security
OS.access
,但在Windows上似乎根本不起作用。它告诉我文件总是有写权限,但是在继续写的过程中,我遇到了一个意外的PermissionError异常——PermissionDenied。
我看到StackOverflow链接指向win32security()。但这个话题已经有10年历史了,现在检查一下图书馆,似乎图书馆目前并没有得到支持或保护
要检查权限的代码段:
导入操作系统
如果os.name==“posix”:
文件写入='/etc/hosts'
其他:
文件写入='C:\\Windows\\System32\\drivers\\etc\\hosts'
如果os.access(文件写入,os.W\u确定):
打印(“我可以写进去!”)
其他:
打印(“无法写入。没有权限。”)
然后,在文件中写入的代码:
导入操作系统
如果os.name==“posix”:
文件写入='/etc/hosts'
其他:
文件写入='C:\\Windows\\System32\\drivers\\etc\\hosts'
文件资源=打开(文件写入'a')
文件\u resource.write(“\ntest”)
文件\u资源.close()
在任何操作系统中使用python3测试我的代码片段,甚至测试系统中的任何文件(在我的示例中不一定是hosts文件),python将在前面告知当前用户是否可以编写该文件。如果是这样,那么第二个代码段不能返回PermissionError异常-Permission denied,并且目标文件的最后一行应该有一个单词“test”。否则,我甚至不会尝试第二个片段。
在Windows环境中,python无声地告知任何现有文件都有写权限。可能会使用一个with语句自动关闭<代码>'a+'将创建文件(如果该文件尚不存在)并附加该文件。对于阅读和写作,您可以使用
'r+'
:
import os
if os.name == 'posix':
file_to_write = '/etc/hosts'
else:
file_to_write = 'C:\\Windows\\System32\\drivers\\etc\\hosts'
with open('file_to_write', 'a+') as file_resource:
file_resource.write("\ntest") # .close() is automatically called
如果这不起作用,权限错误将是因为您试图写入需要用户权限的路径。如果是这样的话,考虑在Linux机器上使用“代码> CHMOD</代码>的替代方案。在windows中,您可以通过右键单击文件来更改设置。导航到属性设置,然后安全设置允许“写入”可能使用自动关闭的with语句<代码>'a+'将创建文件(如果该文件尚不存在)并附加该文件。对于阅读和写作,您可以使用
'r+'
:
import os
if os.name == 'posix':
file_to_write = '/etc/hosts'
else:
file_to_write = 'C:\\Windows\\System32\\drivers\\etc\\hosts'
with open('file_to_write', 'a+') as file_resource:
file_resource.write("\ntest") # .close() is automatically called
如果这不起作用,权限错误将是因为您试图写入需要用户权限的路径。如果是这样的话,考虑在Linux机器上使用“代码> CHMOD</代码>的替代方案。在windows中,您可以通过右键单击文件来更改设置。导航到属性设置,然后选择安全设置以允许“写入”您可以尝试在附加模式下打开文件,查看是否引发异常。
os.stat
(即st\u模式
)和os.access
在Windows中不支持文件安全,只支持只读文件属性。但是,除非脚本是管理性的,或者它正在搜索可访问的第一个匹配项(例如shutil.which
),否则在打开文件之前手动检查access
,是一种反模式。它对竞争条件是开放的,因为当程序试图打开它时,权限可能已更改,或者文件可能已被取消链接。因此,一般情况下,不要选中访问;如果打开失败,只需处理异常。您可以尝试在追加模式下打开文件,查看是否引发异常。os.stat
(即st_模式
)和os.access
在Windows中不支持文件安全性,只支持只读文件属性。但是,除非脚本是管理性的,或者它正在搜索可访问的第一个匹配项(例如shutil.which
),否则在打开文件之前手动检查access
,是一种反模式。它对竞争条件是开放的,因为当程序试图打开它时,权限可能已更改,或者文件可能已被取消链接。因此,一般情况下,不要选中访问;如果打开失败,只需处理异常。