Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Python2.7,用于确定用户输入路径的权限/内容的操作系统可移植方式_Python_File Io_Io_File Permissions_File Handling - Fatal编程技术网

Python2.7,用于确定用户输入路径的权限/内容的操作系统可移植方式

Python2.7,用于确定用户输入路径的权限/内容的操作系统可移植方式,python,file-io,io,file-permissions,file-handling,Python,File Io,Io,File Permissions,File Handling,免责声明:我已经搜索了一般(谷歌)和这里的一些关于这个主题的信息,但大多数答案要么是非常旧的,要么对我来说似乎不太有意义,所以如果这看起来很简单或没有信息,我会提前道歉 问题:我的应用程序接受命令行输入,可能是路径或文件,我需要确定有关它的几件事 是路径还是文件 它是相对的还是绝对的 是否可读和/或可写(需要读写测试结果)(忽略竞争情况的可能性) 一个警告,一个警告 try: file=open(filename,'w') except OSError as e:

免责声明:我已经搜索了一般(谷歌)和这里的一些关于这个主题的信息,但大多数答案要么是非常旧的,要么对我来说似乎不太有意义,所以如果这看起来很简单或没有信息,我会提前道歉

问题:我的应用程序接受命令行输入,可能是路径或文件,我需要确定有关它的几件事

  • 是路径还是文件
  • 它是相对的还是绝对的
  • 是否可读和/或可写(需要读写测试结果)(忽略竞争情况的可能性)
  • 一个警告,一个警告

        try:
            file=open(filename,'w')
        except OSError as e:
            {miscellaneous error handling code here}
    
    很明显,我会告诉我参数(上例中的文件名)是否存在/可写等。我对异常代码了解不够,不知道如何解释异常结果。它也不会提供相对/绝对信息

    假设没有一种方法可以做到这一点,那么我需要知道三件事:

  • 如何确定相对/绝对
  • 它是指向文件还是指向目录
  • 程序的EUID可以读取位置,也可以进行写入

  • 我试图从这里收集的信息中学习,我是python新手,已经完成了一个重要的项目。除了这一部分,我都掌握了。任何帮助都将不胜感激。(欢迎指向好的帮助网站!)(除了已经被书签的docs.python.org;-)

    以下是您的答案。指定以下内容适用于windows和linux

  • 如何确定相对/绝对 如果路径是绝对路径,则返回True,否则返回False

  • 它是指向文件还是指向目录 类似地,使用查找路径是否为目录。 您可以使用查找路径是否为文件

  • 程序的EUID可以读取位置,也可以进行写入。 您可以使用了解在路径指定的文件上是否可以执行需要模式指定的权限的操作。 注意:这不适用于通过网络访问的文件。您可以使用这是获取所有信息的正确方法。然而,这是一个更昂贵的电话,因此,你应该尝试在一次通话中获得所有信息。要解释结果,可以使用模块


  • 似乎我可以通过isbs()、isfile()、isdir()等来满足这些需求。我想不出一个函数可以为给定文件的读/写访问提供简单的True/False,但解决这个问题的一个方法可能是使用模块的stat函数,并查看文件的权限和所有者。

    OK,第1点和第2点已解决。我看到了有关os.access的信息,但这让我感到不安:(注意,即使access()表示I/O操作会成功,特别是对于网络文件系统上的操作,这些操作的权限语义可能超出了通常的POSIX权限位模型。)(从页面复制)是的,
    os.access()
    不会尊重ACL。这是在Windows中执行权限的常用方式,某些Unix也支持这种方式(我知道Mac OS X支持)。了解文件是否可写的唯一跨平台方法是打开文件进行写入。是的,感谢您指出这一点。我认为os.stat是获取信息的正确方式。然而,这是一个更昂贵的调用,因此,您应该尝试在一个调用中获取所有信息。os.stat的文档让我感到困惑。不过,这似乎是一个显而易见的选择。我对此提出质疑,因为它说它会查看组和所有者的文件权限,而且据我所知(这里的知识有限),windows不会在其系统中使用这些数据,尽管我认为这些数据一定在某个地方。我感谢ChrisC Himanshu和Kindall。在提供的答案和评论之间,我现在知道如何去做,不幸的是,我不得不以我试图避免的方式去做,但这就是生活。我感谢你们的快速和良好的回答。发布为已解决(归功于Himanshu,因为他和ChrisC在几分钟内回答了对方,我基于谁的计数最低…对不起,chris,但我喜欢帮助这个小家伙)我再次感谢大家。