vj <[EMAIL PROTECTED]> wrote: > How do I do the following unix command: > > mkdir -m770 test > > with the os.mkdir command. Using os.mkdir(mode=0770) ends with the > incorrect permissions.
You mean :- $ python -c 'import os; os.mkdir("test", 0770)' $ stat test/ File: `test/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 2453906 Links: 2 Access: (0750/drwxr-x---) Uid: ( 518/ ncw) Gid: ( 518/ ncw) Access: 2006-12-02 09:42:59.000000000 +0000 Modify: 2006-12-02 09:42:59.000000000 +0000 Change: 2006-12-02 09:42:59.000000000 +0000 vs $ rmdir test $ mkdir -m770 test $ stat test/ File: `test/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 2453906 Links: 2 Access: (0770/drwxrwx---) Uid: ( 518/ ncw) Gid: ( 518/ ncw) Access: 2006-12-02 09:43:23.000000000 +0000 Modify: 2006-12-02 09:43:23.000000000 +0000 Change: 2006-12-02 09:43:23.000000000 +0000 $ umask 0022 $ So it looks like python mkdir() is applying the umask where as /bin/mkdir doesn't. From man 2 mkdir mkdir() attempts to create a directory named pathname. The parameter mode specifies the permissions to use. It is modified by the process's umask in the usual way: the permissions of the created directory are (mode & ~umask & 0777). Other mode bits of the created directory depend on the operating system. For Linux, see below. So python follows C rather than shell. Seems reasonable. To fix your problem, reset your umask thus :- $ rmdir test $ python -c 'import os; os.umask(0); os.mkdir("test", 0770)' $ stat test File: `test' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 2453906 Links: 2 Access: (0770/drwxrwx---) Uid: ( 518/ ncw) Gid: ( 518/ ncw) Access: 2006-12-02 09:48:04.000000000 +0000 Modify: 2006-12-02 09:48:04.000000000 +0000 Change: 2006-12-02 09:48:04.000000000 +0000 $ -- Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list