Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you create in python a file with permissions other users can write

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

like image 819
Richard de Ree Avatar asked Apr 20 '16 13:04

Richard de Ree


People also ask

How do you let a user choose a file in Python?

Summary. Use the askopenfilename() function to display an open file dialog that allows users to select one file. Use the askopenfilenames() function to display an open file dialog that allows users to select multiple files.


2 Answers

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) with open(os.open('filepath', os.O_CREAT | os.O_WRONLY, 0o777), 'w') as fh:   fh.write(...) 

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. 
like image 85
AXO Avatar answered Sep 25 '22 05:09

AXO


The problem is your call to open() recreates the call. Either you need to move the chmod() to after you close the file, OR change the file mode to w+.

Option1:

with open("/home/pi/test/relaxbank1.txt", "w+") as fh:     fh.write(p1) os.chmod("/home/pi/test/relaxbank1.txt", 0o777) 

Option2:

os.chmod("/home/pi/test/relaxbank1.txt", 0o777) with open("/home/pi/test/relaxbank1.txt", "w+") as fh:     fh.write(p1) 

Comment: Option1 is slightly better as it handles the condition where the file may not already exist (in which case the os.chmod() will throw an exception).

like image 27
user590028 Avatar answered Sep 25 '22 05:09

user590028