2009-10-26 14 views
9

Próbuję utworzyć folder i utworzyć w nim plik.Python mkdir daje mi złe uprawnienia

Ilekroć utworzę ten folder (poprzez Python), utworzy on folder, który nie daje mi żadnych uprawnień i tylko do odczytu.

Kiedy próbuję utworzyć plik, otrzymuję IOError.

Error: <type 'exceptions.IOError'> 

Próbowałem utworzyć (i wyszukać) opis wszystkich pozostałych trybów (oprócz 0770).

Czy ktoś może mi dać światło? Jakie są inne kody trybu?

+0

Czy próbujesz utworzyć plik w ścieżce, do której nie masz dostępu? – jldupont

+0

Jaka jest twoja umask? – ephemient

Odpowiedz

18

Po utworzeniu folderu można ustawić uprawnienia z os.chmod

Mod jest napisane w bazie 8, jeśli przekonwertować go do binarnego byłoby

000 111 111 000 
    rwx rwx rwx 

Pierwszy rwx jest dla właściciela , drugi dla grupy, a trzeci jest dla świata

r = odczyt, w = pisać, x = wykonać

zezwoleniem SION widać najczęściej są
7 odczytu/zapisu/wykonać - trzeba wykonać do katalogów, aby zobaczyć zawartość
6 odczytu/zapisu
4 readonly

Podczas korzystania os.chmod najrozsądniej używać notacji ósemkowej tak

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

Pamiętaj powiedziałem zwykle chcesz katalogi być „wykonywalny”, dzięki czemu można zobaczyć jej zawartość.

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

Uwaga: Składnia 0o777 jest Pythonie 2.6 i 3+. w przypadku serii 2 jest to 0777. 2.6 akceptuje dowolną składnię, więc wybrana przez Ciebie wersja będzie zależała od tego, czy chcesz być kompatybilny w przód czy w tył.

+3

"windows" -tag .. –

+0

Chyba miał na myśli os.chmod – RedGlyph

+0

Daj facetowi również przykład, może być mylony z * nix chmod. –

5

Prawdopodobnie masz funky umask. Wypróbuj os.umask(0002) przed utworzeniem katalogu.

+0

Umask z 777 zapewniałby, że wszystkie bity uprawnień wynoszą zero. Mogłeś mieć na myśli 000; rozsądniej byłoby użyć 002 lub 022. –

+0

/me jest idiotą. Dzięki. –

3

Python instrukcja mówi:

os.mkdir(path[, mode]) 

Utwórz katalog o nazwie ścieżka z trybem numerycznym. Domyślny tryb to 0777 (ósemkowy). W niektórych systemach tryb jest ignorowany. Tam, gdzie jest używana, aktualna wartość umask jest najpierw maskowana. Dostępność: Unix, Windows.

Czy określono tryb - który tryb został określony. Czy rozważałeś jednoznaczne określenie trybu? I jaka jest wartość umask ustawiona na "

1

Od twojego systemu Windows, to może być crapshoot. Upewnij się, że nie ma żadnych zwariowanych specjalnych uprawnień w katalogu nadrzędnym lub z ustawieniami polityki, które określają uprawnienia do wszystkich katalogów utworzone przez twoje konto get.Wątpię, że jest to problem z pytonem, ponieważ nie byłem w stanie odtworzyć problemu w systemie Windows przy relatywnie waniliowej instalacji Vista.

Powiązane problemy