2

シェルで取得するのと同じ権限を使用して、Pythonでディレクトリを作成したいと思いますmkdir

標準のPythonドキュメントには次のように書かれています。

os.mkdir(path [、mode])

数値モードモードでpathという名前のディレクトリを作成します。デフォルトのモードは0777(8進数)です。一部のシステムでは、モードは無視されます。これが使用される場合、現在のumask値が最初にマスクされます。ディレクトリがすでに存在する場合、OSErrorが発生します。

デフォルト0777のアクセス許可ではなく、親ディレクトリから継承されたアクセス許可が必要です。親ディレクトリのアクセス許可を照会せずにそれを行うことはできますか?

4

2 に答える 2

7

シェルで取得するのと同じ権限をすでに取得していますmkdir

シェルmkdirを使用:

dirオペランドごとに、mkdirユーティリティは、IEEE Std 1003.1-2001のシステムインターフェイスボリュームで定義されているmkdir()関数と同等のアクションを実行し、次の引数で呼び出されます。

dirオペランドは、パス引数として使用されます。

S_IRWXU、S_IRWXG、およびS_IRWXOのビット単位のORの値は、モード引数として使用されます。(-mオプションが指定されている場合、mode option-argumentはこのデフォルトをオーバーライドします。)

または、より読みやすく(BSDマンページから):

...現在のumask(2)によって変更されたモードrwxrwxrwx(0777)を使用して、指定された順序でオペランドとして指定されたディレクトリを作成します。

Pythonos.mkdirはまったく同じことをします:

...[t]デフォルトモードは0777です...現在のumask値が最初にマスクされます。

実際、Pythonは、シェルのドキュメントに記載されているのとまったく同じPOSIXmkdir関数をまったく同じ引数で呼び出します。その関数は次のように定義されます。

新しいディレクトリのファイル許可ビットは、モードから初期化されます。mode引数のこれらのファイル許可ビットは、プロセスのファイル作成マスクによって変更されます。

または、もっと読みやすく、FreeBSD / OSXのマンページから:

ディレクトリパスは、モードで指定され、呼び出しプロセスのumask(2)によって制限されたアクセス許可で作成されます。

Windowsのような非POSIXプラットフォームを使用している場合、Pythonは、ネイティブシェルに別の方法で呼び出されるコマンドがある場合でも、POSIXの動作をエミュレートしようとしmkdirます。これは主に、そのような主要なシェルがWindowsであり、これはmdmkdirの同義語であり、アクセス許可が文書化されていない限り、そのシェルの機能の詳細が文書化されていないためです。

于 2012-09-17T20:06:26.160 に答える
3

を使用して、ファイルを書き込んでいるディレクトリの現在のアクセス許可を取得できる可能性があるようです。ファイルのアクセス許可マスクを取得するにはどうすればよいですか?次に、そのモードをmkdir?に渡します。

于 2012-09-17T20:03:42.590 に答える