2013-03-25 10 views
71

Ben değiştirmeye çalıştığımda Son zamanlarda, Python modülü os kullanıyorum Bir dosyanın izni, beklenen sonucu almadım. (230)Python modülü os.chmod (dosya, 664) rw-rw-r-- ama -w - wx ----

Ancak
--w--wx--- 1 ag ag 0 Mar 25 05:45 test_file 

--- wx - Mesela ben

os.chmod("/tmp/test_file", 664) 

mülkiyet izni aslında -w olduğunu rw-rw-r-- izni değiştirmeye yöneliktir Kodda 664 ila 0664 değiştirirsem, sonuç sadece ihtiyacım olan şey, örn.

os.chmod("/tmp/test_file", 0664) 

sonucudur:

-rw-rw-r-- 1 ag ag 0 Mar 25 05:55 test_file 

herkes baştaki 0'ı doğru sonuç almak için bu kadar önemli olduğunu neden yaptığını açıklayan yardımcı olabilir mi? izinler olarak başında sıfır automagicallylar davranır herhangi bir tamsayı bir sekizlik tamsayı olarak ayarlanır ve Python çünkü o lider sıfır neden önemli olduğunu merak ediyorsanız

+20

Sekizli. Sekizli. Sekizli. Bu dokümanlardan açık olmalıdır, çünkü Unix için –

+0

Bayrak .. –

+2

Ben http://bugs.python.org/issue25377 de piton belgeleri için bir sorun açtı. –

cevap

73

bir different forum

üzerinde buldum, bu kadar sekizli. Yani os.chmod (ondalık) ("dosya", 484) aynı sonucu verecektir.

Eğer

os.chmod("/tmp/test_file", 436) 

[Güncelleme] Not, Python 3 sizinle ön eki gerekir Ne sekizlik Senin durumunda 1230

olduğunu 664 geçiyor yapıyoruz 0o (sıfır oh). Örneğin, 0o666

+0

Teşekkürler ama hala ondalık içinde 484 forumda belirtilen iplik mantıklı sekizlik, içinde 744 demektir ki karıştı.Bununla birlikte, 644'ü ondalık sayede verirsek, sekizlikte 1204'e gider. 1204, sekizlikte 230 ile nasıl ilişkilidir? – AplusG

+0

Bu yazıdan birebir alındı. – RedBaron

+0

cevabının son kısmında ihtiyacım olanı ekledim (436) oh..sorry ... hatam ... yanlışlıkla 664'ü 664'e götürür ... – AplusG

6

lider "0" bu sekizlik sabit değil, ondalık biridir gelir. ve dosya modunu değiştirmek için bir sekizli gerekir.

izinler bir bit maskesidir, örneğin, rwxrwx --- ikili olarak 111111000'dir ve ondalık gösterimi hesaplamak yerine sekizliye dönüştürmek için bitleri 3 ile gruplandırmak çok kolaydır. Eğer onlu, 420 hesaplayabilir olarak

0644 (sekizlik), ikili 0.110.100.100 (i okunabilmesi için noktalar ekledik), ya da. python2 olarak

$ chmod 755 somefile 

: benzer symantics isteyenler için

76

Yani

$ python -c "import os; os.chmod('somefile', 0755)" 

Ama python3 içinde:

$ python3 -c "import os; os.chmod('somefile', 0o755)" 
+6

python3 biçimi python 2.7.9'da da çalışır. Daha önceki sürümleri kontrol etmedim. –

İlgili konular