2009-10-26 46 views
9

我试图创建一个文件夹并在其中创建一个文件。Python mkdir给了我错误的权限

每当我创建该文件夹(通过Python),它会创建一个文件夹,它根本不给我任何权限和只读模式。

当我尝试创建文件时,我得到一个IOError。

Error: <type 'exceptions.IOError'> 

我试着创建(和搜索)所有其他模式(除了0770)的描述。

任何人都可以给我光明吗?其他模式代码是什么?

+0

您是否试图在您无权访问的路径中创建文件? – jldupont 2009-10-26 20:42:40

+0

你的umask是什么? – ephemient 2009-10-26 20:46:47

回答

18

后创建的国防部是写在基地8,如果你将其转换为二进制这将是

000 111 111 000 
    rwx rwx rwx 

第一rwx你可以用os.chmod

设置权限的文件夹所有者,第二个是用于组和第三是世界

R =读,W =写,X =执行

的PERMIS sions您最常看到的
7读/写/执行 - 你需要执行的目录中看到的内容
6读/写
4只读

当您使用os.chmod它最有意义使用八进制 所以

os.chmod('myfile',0o666) # read/write by everyone 
os.chmod('myfile',0o644) # read/write by me, readable for everone else 

还记得我说你平时想的目录是“可执行文件”,这样就可以看到内容。

os.chmod('mydir',0o777) # read/write by everyone 
os.chmod('mydir',0o755) # read/write by me, readable for everone else 

注:0o777语法为Python 2.6和3+。否则对于2系列它是0777。 2.6接受这两种语法,所以你选择的语法将取决于你想要向前还是向后兼容。

+3

“windows”-tag .. – 2009-10-26 20:50:36

+0

我想他的意思是os.chmod – RedGlyph 2009-10-26 20:52:40

+0

也给这个人一个例子,它可以与* nix chmod混淆。 – 2009-10-26 20:55:35

5

你可能有一个时髦的umask。在制作您的目录之前,请尝试os.umask(0002)

+0

777的umask将确保所有权限位均为零。你可能意味着000;使用002或022可能更明智。 – 2009-10-26 22:01:59

+0

/我是个白痴。谢谢。 – 2009-10-26 23:30:52

3

Python的手册说:

os.mkdir(path[, mode]) 

创建一个命名为数字模式模式路径的目录。默认模式是0777(八进制)。在某些系统上,模式被忽略。在使用它的地方,当前的umask值首先被屏蔽掉。可用性:Unix,Windows。

您是否指定了模式 - 您指定了哪种模式。你有没有考虑明确指定一个模式?什么是该程序的umask值设置为“

1

既然你在Windows上,这可能是一个crapshoot。确保没有任何古怪的父目录或定义任何目录权限的策略设置的特殊权限由您的帐户创建获取。我怀疑这是一个python问题,因为我还没有能够在Vista上重新安装Vista相关问题。