it-swarm.com.de

Wie erstellt man in python eine Datei mit Berechtigungen, die andere Benutzer schreiben können?

Wie kann ich in python (3) eine Datei erstellen, die auch andere Benutzer schreiben können?

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

was ich bekomme

--- sr-S - t 1 root root 12 Apr 20 13:21 relaxbank1.txt

erwartet (nach dem Ausführen in der Kommandozeile $ Sudo chmod 777 relaxbank1.txt)

-rwxrwxrwx 1 root root 12 Apr 20 13:21 relaxbank1.txt

13
Richard

Das Problem ist, dass Ihr Aufruf von open() den Anruf neu erstellt. Entweder müssen Sie die chmod() nach dem Schließen der Datei verschieben, OR den Dateimodus auf w+ Ändern.

Option 1:

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

Option 2:

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

Kommentar: Option1 ist etwas besser, da es die Bedingung behandelt, in der die Datei möglicherweise noch nicht existiert (in diesem Fall löst die Funktion os.chmod() eine Ausnahme aus).

15
user590028

Wenn Sie os.chmod Nicht verwenden möchten und die Datei lieber mit den entsprechenden Berechtigungen erstellen lassen möchten, können Sie os.open verwenden, um den entsprechenden Dateideskriptor zu erstellen, und dann open der Deskriptor:

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 Hinweis:

Das eingebaute open () in Python 2.x unterstützt das Öffnen nach Dateideskriptor nicht. Verwenden Sie os.fdopen = stattdessen, sonst bekommst du:

TypeError: coercing to Unicode: need string or buffer, int found.
36
AXO

Dies ist eine robuste Methode

#!/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)

Siehe wie:

Siehe auch: Datei mit bestimmten Berechtigungen in Python schreiben