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}
很明显,我会告诉我参数(上例中的文件名)是否存在/可写等。我对异常代码了解不够,不知道如何解释异常结果。它也不会提供相对/绝对信息
假设没有一种方法可以做到这一点,那么我需要知道三件事:
我试图从这里收集的信息中学习,我是python新手,已经完成了一个重要的项目。除了这一部分,我都掌握了。任何帮助都将不胜感激。(欢迎指向好的帮助网站!)(除了已经被书签的docs.python.org;-)以下是您的答案。指定以下内容适用于windows和linux
似乎我可以通过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,但我喜欢帮助这个小家伙)我再次感谢大家。