2017-07-20 1 views
0

を割り当てていません。この問題を再現する手順のリストです:理想的のpython os.makedirsは、ここでグループの書き込み権限

[email protected] $ ipython3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type 'copyright', 'credits' or 'license' for more information 
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help. 

In [1]: !pwd 
/tmp/test 

In [2]: !ls -ltr /tmp | grep test 
drwxrwxr-x 2 chaudhary recsys  4096 Jul 20 12:01 test 

In [3]: import os 

In [4]: os.makedirs('foo/bar/baz', mode=0o775) 

In [5]: !tree -pugh 
. 
└── [drwxr-xr-x chaudhary recsys 4.0K] foo 
    └── [drwxr-xr-x chaudhary recsys 4.0K] bar 
     └── [drwxr-xr-x chaudhary recsys 4.0K] baz 

3 directories, 0 files 

、すべてのこれらのフォルダは、グループ書き込み権限drwxrwxr-xを持っている必要があります。 this question's answerで述べたように私はこれを回避できることを知っています。

私はグループのアクセス許可が間違っている理由であるかもしれない何かが紛失しているかどうかを知りたいと思います。

UPDATE:上に示した

テストスニペットは、Linux(Ubuntuの16.04)で行いました。私もMacでこれを再現することができました。 docに

[email protected] $ mkdir /tmp/test; chmod 775 /tmp/test; ls -l /tmp/ | grep test; cd /tmp/test; python3 -c 'import os; os.makedirs("foo/bar/baz", 0o775)'; ls -l /tmp/test; ls -l /tmp/test/foo; ls -l /tmp/test/foo/bar 

drwxrwxr-x 2 chaudhary wheel  68 Jul 20 12:22 test 
total 0 
drwxr-xr-x 3 chaudhary wheel 102 Jul 20 12:22 foo 
total 0 
drwxr-xr-x 3 chaudhary wheel 102 Jul 20 12:22 bar 
total 0 
drwxr-xr-x 2 chaudhary wheel 68 Jul 20 12:22 baz 

答えて

1

Pythonの名誉umaskを使用することをお勧めし、時には完全にモードを無視:一部のシステムで

は、モードが無視されます。使用されている場合は、現在のumask の値が最初にマスクされます。最後の9ビット以外のビット(つまり、モードの8進表現の最後の3桁の )が設定されている場合、その意味はプラットフォームによって異なります。いくつかのプラットフォームでは、それらは無視され、 を設定するには、明示的にchmod()を呼び出す必要があります。

から:https://docs.python.org/3/library/os.html umaskのhere

について

より多くのように行くための一つの方法は、実行中のプロセスのために(ご希望の権限を妨げないumask値を設定することである - また、それらをリセットするようにしてください後で):

[email protected]:~/demo$ mkdir demo0 
[email protected]:~/demo$ cat test.py 
import os 

os.makedirs("demo1/demo2/demo3",0775) 

[email protected]:~/demo$ python test.py 
[email protected]:~/demo$ ls -lah 
total 24K 
drwxr-xr-x 4 demo demo 4.0K Jul 20 06:52 . 
drwxr-xr-x 6 demo demo 4.0K Jul 20 06:52 .. 
drwxr-xr-x 2 demo demo 4.0K Jul 20 06:52 demo0 
drwxr-xr-x 3 demo demo 4.0K Jul 20 06:52 demo1 
-rw-r--r-- 1 demo demo 118 Jul 20 06:52 test2.py 
-rw-r--r-- 1 demo demo 50 Jul 20 06:46 test.py 
[email protected]:~/demo$ cat test2.py 
import os 

try: 
    oldumask = os.umask(0) 
    os.makedirs("demo2/demo3/demo4",0775) 
finally: 
    os.umask(oldumask) 

[email protected]:~/demo$ python test2.py 
[email protected]:~/demo$ ls -lah 
total 28K 
drwxr-xr-x 5 demo demo 4.0K Jul 20 06:52 . 
drwxr-xr-x 6 demo demo 4.0K Jul 20 06:52 .. 
drwxr-xr-x 2 demo demo 4.0K Jul 20 06:52 demo0 
drwxr-xr-x 3 demo demo 4.0K Jul 20 06:52 demo1 
drwxrwxr-x 3 demo demo 4.0K Jul 20 06:52 demo2 
-rw-r--r-- 1 demo demo 118 Jul 20 06:52 test2.py 
-rw-r--r-- 1 demo demo 50 Jul 20 06:46 test.py 
[email protected]:~/demo$ ls -lah demo2/ 
total 12K 
drwxrwxr-x 3 demo demo 4.0K Jul 20 06:52 . 
drwxr-xr-x 5 demo demo 4.0K Jul 20 06:52 .. 
drwxrwxr-x 3 demo demo 4.0K Jul 20 06:52 demo3 
[email protected]:~/demo$ 

もちろん、これらの権限が常に必要な場合は、umaskをos-levelに設定できます。

+1

@Shubham訂正ありがとう;) – Mandraenke

1

それはいくつかのシステムではモードパラメータは無視されるか、うまく解釈されないと言う:一部のシステムでは

は、モードが無視されます。使用されている場合は、現在のumask の値が最初にマスクされます。最後の9ビット以外のビット(つまり、モードの8進表現の最後の3桁の )が設定されている場合、その意味はプラットフォームによって異なります。いくつかのプラットフォームでは、それらは無視され、 を設定するには、明示的にchmod()を呼び出す必要があります。

は、それはあなたがのchmod()の代わりに

ソースhttps://docs.python.org/3/library/os.html#os.mkdir

関連する問題