2013-07-19 10 views
5

Ich habe ein Skript, das, wenn ausgeführt, erstellt ein Verzeichnis in /home/test/ und schreibt dann einige Dateien darin. Wenn ich dieses Skript ausführe, funktioniert es gut. Allerdings, wenn ich es von einem Perl-Skript aufrufen mitMachen Sie alle neuen Verzeichnisse haben 777 Berechtigungen

$ret = `/home/..../testscript.py` 

es keine Berechtigungen, so dass es den Ordner nicht erstellen können, oder kann im Inneren nicht schreiben, nachdem sie erstellt wird. Es sieht so aus, als wenn Python open("/home/test/abcde/file1.txt", "w") hat, hat diese Datei Berechtigungen -rw-r--r--

Was kann ich tun, um dies zu umgehen? Gibt es eine Möglichkeit,/home/test so einzurichten, dass alle Unterverzeichnisse rekursiv globalen Schreibzugriff haben? Oder eine bessere Lösung vielleicht?

+1

Wie machst du diese Verzeichnisse? Sie sollten die Berechtigungen festlegen können, wenn Sie sie erstellen. – squiguy

+0

os.system ('chmod -R 777/home/test') – user1759572

+0

os.mkdir ("/ home/test/abcde") –

Antwort

12

Put:

os.umask(0000) 

im Skript Python, bevor es das Verzeichnis erstellt. Wenn Sie das Python-Skript nicht ändern können, setzen Sie:

im Perl-Skript, bevor es das Python-Skript aufruft.

Wenn eine neue Datei oder ein Verzeichnis erstellt wird, werden die Berechtigungen, indem Sie die Berechtigungen in dem Aufruf von creat() oder mkdir(), angegeben bestimmt und dann die Bits Abkleben, die in den umask angegeben sind.

Normalerweise geben Sie Anwendungen 0666 oder 0777 Berechtigungen, wenn sie die Funktion (je nachdem, ob sie etwas erstellen, von ausführbaren oder nicht sein sollte) nennen. Ein gemeinsamer Wert für umask ist 022, der Gruppen- und Weltschreibberechtigungen deaktiviert. Wenn Sie sie nicht deaktivieren möchten, verwenden Sie den obigen Wert umask, um die im Aufruf angegebenen Berechtigungen beizubehalten.

Verwandte Themen