Python mkdirが間違った権限を与えて
-
06-07-2019 - |
質問
フォルダを作成し、その中にファイルを作成しようとしています。
そのフォルダーを(Pythonを介して)作成するたびに、アクセス許可がまったく与えられない読み取り専用モードのフォルダーが作成されます。
ファイルを作成しようとすると、IOErrorが発生します。
Error: <type 'exceptions.IOError'>
(0770以外の)他のすべてのモードの説明を作成(および検索)しようとしました。
誰もが私に光を与えることができますか?他のモードコードは何ですか?
解決
フォルダを作成したら、 os.chmod
modはベース8で書かれており、バイナリに変換すると
000 111 111 000
rwx rwx rwx
最初の rwx
は所有者用、2番目はグループ用、3番目は世界用
r = read、w = write、x = execute
最も頻繁に表示される権限は
7読み取り/書き込み/実行-内容を表示するにはディレクトリの実行が必要です
6読み取り/書き込み
4読み取り専用
os.chmod
を使用する場合、8進表記を使用するのが最も理にかなっています
そう
os.chmod('myfile',0o666) # read/write by everyone
os.chmod('myfile',0o644) # read/write by me, readable for everone else
通常、ディレクトリは「実行可能」にしたいということを思い出してください。内容を見ることができます。
os.chmod('mydir',0o777) # read/write by everyone
os.chmod('mydir',0o755) # read/write by me, readable for everone else
注: 0o777
の構文は、Python 2.6および3+用です。それ以外の場合、2シリーズの場合は 0777
です。 2.6はどちらの構文も受け入れるので、選択する構文は、前方互換性と後方互換性のどちらを望むかによって異なります。
他のヒント
おそらくファンキーなumaskを持っているでしょう。ディレクトリを作成する前に os.umask(0002)
を試してください。
Pythonマニュアルには次のように書かれています:
os.mkdir(path[, mode])
数値モードモードでpathという名前のディレクトリを作成します。デフォルトのモードは0777(8進数)です。一部のシステムでは、モードは無視されます。使用される場合、現在のumask値が最初にマスクされます。利用可能性:Unix、Windows。
モードを指定しました-どのモードを指定しましたか。モードを明示的に指定することを検討しましたか?そして、プログラムのumask値はどのように設定されますか
Windowsを使用しているため、これはがらくたになる可能性があります。親ディレクトリに、またはアカウントによって作成されたディレクトリが取得するアクセス許可を定義するポリシー設定で、奇妙な特別なアクセス許可がないことを確認してください。私は比較的普通のVistaのインストールでWindows上で問題を再現することができなかったので、これはPythonの問題だとは思わない。