相关疑难解决方法(0)

Python - 测试目录权限

在Windows上的Python中,有没有办法确定用户是否有权访问目录?我已经看过了,os.access但它给出了错误的结果.

>>> os.access('C:\haveaccess', os.R_OK)
False
>>> os.access(r'C:\haveaccess', os.R_OK)
True
>>> os.access('C:\donthaveaccess', os.R_OK)
False
>>> os.access(r'C:\donthaveaccess', os.R_OK)
True
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?有没有更好的方法来检查用户是否有权访问目录?

python windows directory permissions

8
推荐指数
2
解决办法
2万
查看次数

检查Python中的路径是否有效

有没有简单的方法来检查路径是否有效?该文件现在不必存在,我想知道它是否存在.

我目前的版本是这样的:

try:
  f = open(path)
except:
  <path invalid>
Run Code Online (Sandbox Code Playgroud)

我正在考虑简单地检查路径是否包含任何这些字符.

python

8
推荐指数
2
解决办法
1万
查看次数

确定字符串输入是否可以是Python中的有效目录

我正在编写样板,处理命令行参数,稍后将传递给另一个函数.这个其他函数将处理所有目录创建(如果需要).因此我的bp只需要检查输入字符串是否是有效目录,或者是有效文件,还是其他东西.它需要区分"c:/ users/username /"和"c:/users/username/img.jpg"之类的东西

def check_names(infile):
    #this will not work, because infile might not exist yet
    import os
    if os.path.isdir(infile):
        <do stuff>
    elif os.path.isfile(infile):
        <do stuff>
    ...
Run Code Online (Sandbox Code Playgroud)

标准库似乎没有提供任何解决方案,但理想的是:

def check_names(infile):
    if os.path.has_valid_dir_syntax(infile):
        <do stuff>
    elif os.path.has_valid_file_syntax(infile):
        <do stuff>
    ...
Run Code Online (Sandbox Code Playgroud)

在打字时考虑问题之后,我无法理解一种检查(仅基于语法)字符串是否包含除文件扩展名和尾部斜杠之外的文件或目录(两者都可能不存在)的方法.可能刚刚回答了我自己的问题,但是如果有人想到我的随意,请发帖.谢谢!

python operating-system

8
推荐指数
1
解决办法
2万
查看次数

为什么我的应用程序允许我将文件保存到Vista中的Windows和System32文件夹?

我有一个用Delphi 7编写的应用程序,它不需要运行管理员权限.

出于某种原因,即使应用程序未请求UAC提升,我也能够从应用程序中将文件保存到c:\ windows和c:\ windows\system32 .我以管理员身份登录并启用UAC,但我没有更改任何默认的UAC设置.这些文件实际上也显示在Windows资源管理器下.我没有使用"以管理员身份运行"选项.

如果我尝试在相同的配置文件下使用写字板做同样的事情,我会得到预期的错误.

有什么想法发生了什么?

该应用程序使用Ole Structured Storage来保存并包含以下清单,如果有帮助的话.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" name="DelphiApplication" version="1.0.0.0" processorArchitecture="*"/>
<dependency>
<dependentAssembly>
  <assemblyIdentity
    type="win32"
    name="Microsoft.Windows.Common-Controls"
    version="6.0.0.0"
    publicKeyToken="6595b64144ccf1df"
    language="*"
    processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
            <security>
                    <requestedPrivileges>
                            <requestedExecutionLevel
                                   level="asInvoker"
                                   uiAccess="false"/>
                    </requestedPrivileges>
            </security>
    </trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)

编辑:要清楚,我的应用程序默认情况下不会将任何内容保存到这些位置.我通过标准文件保存对话框选择这些位置.

更新

我已经找到了为什么我的申请被视为遗产,尽管包括上述清单.事实证明,第二个清单也包括在内,没有'trustInfo'部分.我已经删除了第二个清单,现在一切都很好.

谢谢你的帮助

compatibility uac file windows-vista

6
推荐指数
1
解决办法
1865
查看次数

检查文件名是否有效

在所有平台(包括Android,iOS等移动平台)上检查文件名是否在Python中有效的最保守的方法是什么?

防爆.

this_is_valid_name.jpg - >有效

**adad.jpg - >无效

a/ad - >无效

python

6
推荐指数
1
解决办法
1万
查看次数

python os 模块文档中的代码示例如何创建安全漏洞?

文件os模块作出如下声明:


笔记

在实际使用 open() 之前,使用 access() 来检查用户是否被授权例如打开文件会创建一个安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操纵它。最好使用EAFP技术。例如:

if os.access("myfile", os.R_OK):
    with open("myfile") as fp:
    return fp.read()
return "some default data"`
Run Code Online (Sandbox Code Playgroud)

最好写成:

try:
    fp = open("myfile")
except PermissionError:
    return "some default data"
else:
    with fp:
        return fp.read()
Run Code Online (Sandbox Code Playgroud)

我不明白用户如何“利用”这个间隔。如果open要引发异常,我不确定如何os.access防止引发该异常。同样,如果用户以某种方式操作文件,为什么不在 EAFP 版本的open命令之前执行文件操作?

我确实理解第二个版本可能更健壮,因为os.access可能无法正确识别可能引发 a 的条件PermissionError,但我不明白LBYL版本的安全性如何。有人可以解释一下吗?

python file-access python-os

5
推荐指数
1
解决办法
74
查看次数

强制参数成为有效路径

我正在编写一个简单的脚本,用于解析存储在AWS CloudWatch上的JSON文件的内容.我已经在脚本中添加了一个接受用户输入的参数解析器,并允许用户将文件的输出打印到屏幕上(以预定的方式),或允许他们将内容输出到本地JSON文件.这是一个让我难以理解的片段:

import argparse

parser = argparse.ArgumentParser(description="Process a log file")
parser.add_argument('-o', '--output', choices=[???, 'print'], 
                    default='print', help='Specify logfile output path or print to screen')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

我的问题源于这parser.add_argument条线,特别是choices论证.我想为这个标志允许两个输入,它们是print本地机器上的一个或一些有效路径.我希望当前标记为问号的选项是Python可以识别的PATH.

有没有办法,使用argparse来指定一个标志的参数之一必须是一个PATH?到目前为止,搜索结果尚无定论.

提前致谢!

python path argparse

0
推荐指数
1
解决办法
78
查看次数