Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python检查ntfs文件系统中的写入权限_Python_Windows_File Permissions_Ntfs - Fatal编程技术网

使用python检查ntfs文件系统中的写入权限

使用python检查ntfs文件系统中的写入权限,python,windows,file-permissions,ntfs,Python,Windows,File Permissions,Ntfs,我需要写入几个文件,这些文件通常需要比普通用户更高级别的权限。在做任何事情之前,我想检查一下当前用户是否可以全部写入。如果是,请继续书写。否则会警告用户并要求首先检查用户级权限 在nix系统中,比如Linux和Mac OS,我可以依赖于OS.access,但在Windows上似乎根本不起作用。它告诉我文件总是有写权限,但是在继续写的过程中,我遇到了一个意外的PermissionError异常——PermissionDenied。 我看到StackOverflow链接指向win32security

我需要写入几个文件,这些文件通常需要比普通用户更高级别的权限。在做任何事情之前,我想检查一下当前用户是否可以全部写入。如果是,请继续书写。否则会警告用户并要求首先检查用户级权限

在nix系统中,比如Linux和Mac OS,我可以依赖于
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
,是一种反模式。它对竞争条件是开放的,因为当程序试图打开它时,权限可能已更改,或者文件可能已被取消链接。因此,一般情况下,不要选中访问;如果打开失败,只需处理异常。