2013-07-19 15 views
5

Ho uno script che, quando è in esecuzione, crea una directory all'interno di /home/test/ e quindi scrive alcuni file al suo interno. Quando eseguo questo script, funziona perfettamente. Tuttavia, quando lo chiamo io da uno script perl conTutte le nuove directory hanno 777 autorizzazioni

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

che non si dispone delle autorizzazioni in modo che non può creare la cartella, o non può scrivere al suo interno dopo la creazione. Sembra che quando Python fa open("/home/test/abcde/file1.txt", "w"), quel file ha permessi -rw-r--r--

Cosa posso fare per aggirare questo? C'è un modo per impostare/home/test in modo ricorsivo che tutte le sottodirectory abbiano accesso globale in scrittura? O forse una soluzione migliore?

+1

Come state creando queste directory? Dovresti essere in grado di impostare i permessi quando li crei. – squiguy

+0

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

+0

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

risposta

12

Put:

os.umask(0000) 

nello script Python prima di creare la directory. Se non è possibile modificare lo script Python, mettere:

umask(0000) 

nello script Perl prima di chiamare lo script Python.

Quando viene creato un nuovo file o una directory, i permessi sono determinati prendendo le autorizzazioni specificate nella chiamata a creat() o mkdir(), e quindi mascherando i bit che sono specificate nella umask.

In genere, le applicazioni specificano le autorizzazioni 0666 o 0777 quando chiamano la funzione (a seconda che stiano creando qualcosa che dovrebbe essere eseguibile o meno). Un valore comune per umask è 022, che disattiva le autorizzazioni di scrittura di gruppo e mondiale. Se non si desidera che siano disattivati, utilizzare il valore umask per mantenere le autorizzazioni specificate nella chiamata.

Problemi correlati