どうすればpython(3)他のユーザーが同様に記述できるファイルを作成します。
os.chmod("/home/pi/test/relaxbank1.txt", 777)
with open("/home/pi/test/relaxbank1.txt", "w") as fh:
fh.write(p1)
私が得るもの
--- sr-S--t 1ルートルート12 Apr 20 13:21 relaxbank1.txt
期待される(コマンドラインで$ Sudo chmod 777 relaxbank1.txtを実行した後)
-rwxrwxrwx 1 root root 12 Apr 20 13:21 relaxbank1.txt
問題は、open()
への呼び出しが呼び出しを再作成することです。ファイルを閉じた後にchmod()
を移動する必要があるか、ORファイルモードを_w+
_に変更します。
オプション1:
_with open("/home/pi/test/relaxbank1.txt", "w+") as fh:
fh.write(p1)
os.chmod("/home/pi/test/relaxbank1.txt", 0o777)
_
オプション2:
_os.chmod("/home/pi/test/relaxbank1.txt", 0o777)
with open("/home/pi/test/relaxbank1.txt", "w+") as fh:
fh.write(p1)
_
コメント:Option1は、ファイルがまだ存在しない可能性のある状態を処理するため、わずかに優れています(この場合、os.chmod()
は例外をスローします)。
os.chmod
を使用したくない場合、適切な権限でファイルを作成したい場合は、 os.open
を使用して適切なファイルを作成できます記述子、次にopen
記述子:
import os
# The default umask is 0o22 which turns off write permission of group and others
os.umask(0)
with open(os.open('filepath', os.O_CREAT | os.O_WRONLY, 0o777), 'w') as fh:
fh.write(...)
Python 2注:
Python 2.xの組み込み open() は、ファイル記述子によるオープンをサポートしていません。使用 代わりにos.fdopen
;そうでない場合:
TypeError: coercing to Unicode: need string or buffer, int found.
これは堅牢な方法です
#!/usr/bin/env python3
import stat
import os
path = 'outfile.txt'
with open(path, 'w') as fh:
fh.write('blabla\n')
st = os.stat(path)
os.chmod(path, st.st_mode | stat.S_IWOTH)
方法を見る:
stat.S_IWOTH
は、生のバイナリ定数の代わりに使用されます。+o
をファイルに追加し、デフォルトでumask
を使用します。以下も参照してください: Python内で?