Issue
How can I in python (3) create a file what others users can write as well. I've so far this but it changes the
os.chmod("/home/pi/test/relaxbank1.txt", 777)
with open("/home/pi/test/relaxbank1.txt", "w") as fh:
fh.write(p1)
what I get
---sr-S--t 1 root root 12 Apr 20 13:21 relaxbank1.txt
expected (after doing in commandline $ sudo chmod 777 relaxbank1.txt )
-rwxrwxrwx 1 root root 12 Apr 20 13:21 relaxbank1.txt
Solution
If you don't want to use os.chmod
and prefer to have the file created with appropriate permissions, then you may use os.open
to create the appropriate file descriptor and then open
the descriptor:
import os
# The default umask is 0o22 which turns off write permission of group and others
os.umask(0)
descriptor = os.open(
path='filepath',
flags=(
os.O_WRONLY # access mode: write only
| os.O_CREAT # create if not exists
| os.O_TRUNC # truncate the file to zero
),
mode=0o777
)
with open(descriptor, 'w') as fh:
fh.write('some text')
# the descriptor is automatically closed when fh is closed
Using a custom opener
will make things easier and less error-prone. open
will generate the appropriate flags
for our opener
according to the requested mode (w
):
import os
os.umask(0)
def opener(path, flags):
return os.open(path, flags, 0o777)
with open('filepath', 'w', opener=opener) as fh:
fh.write('some text')
Python 2 Note:
The built-in open() in Python 2.x doesn't support opening by file descriptor. Use os.fdopen
instead; otherwise you'll get:
TypeError: coercing to Unicode: need string or buffer, int found.
Answered By - AXO
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.