Quella è la mia messa a punto:le autorizzazioni di gruppo di impostazioni con Python
ho una macchina virtuale (Ubuntu 14.04 LTS.), Dove è in esecuzione un database PostgreSQL/PostGIS.
Con Windows 7 in QGIS mi collego a questo database e carico feature layer nel mio progetto GIS.
Con un po 'di codice Python, creo un file con un ID tessera e alcune informazioni.
import os
import io
import time
layer=None
for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
if lyr.name() == "fishnet_final":
layer = lyr
for f in layer.selectedFeatures():
pth = os.path.join(os.path.dirname(r'H:\path_to_file\'), str(f['name']) + "_" + str(time.strftime("%Y-%m-%d")) + "_" + str(f['country']) + ".txt")
fle = open(pth,'wb')
fle.writelines(str(f['name']))
fle.write('\n')
fle.write(str(time.strftime("%Y-%d-%m")))
fle.write('\n')
fle.write(str(f['country']))
fle.write('\n')
fle.close()
os.rename(pth, pth.replace(' ', ''))
Il file ha il permesso:
-rwx------
voglio impostare anche le stesse autorizzazioni per il mio gruppo e altri.
-rwxrwxrwx
ho provato:
import shlex
command=shlex.split("chmod 777 r'H:\path_to_file\file.txt'")
subprocess.call(command)
Nessun successo.
Cosa stava lavorando è:
command=shlex.split("touch r'H:\path_to_file\file.txt'")
O
command=shlex.split("rm r'H:\path_to_file\file.txt'")
Perché non funziona il comando chmod?
Sotto UNIX, posso chmod questo file e sono lo stesso utente di Windows.
Ho anche provato il metodo os.chmod. Ma nessun successo.
import os, stat
st = os.stat(r'H:\path_to_file\file.txt')
os.chmod(r'H:\path_to_file\file.txt', st.st_mode | 0o111)
UPDATE
Quando faccio un "chmod 777 file" in ambiente UNIX (Solaris) i permessi sono
-rwxrwxrwx
Quello che posso fare ora è di declassare/rimuovere le autorizzazioni sotto Windows nel progetto GIS:
subprocess.call(r'chmod 400 "H:\path_to_file\file.txt"', shell=True)
0
-r-xr-xr-x
Con questo comm e ottengo un riscontro 0
nell'output della console python
Ho anche un riscontro 0
quando eseguo un chmod 777 sul nuovo file ma non succede nulla.
Il problema è che posso solo eseguire il downgrade delle autorizzazioni. Non riesco a impostare nuove autorizzazioni!
È possibile stampare il ritorno di ogni 'subprocess.call (...)'? Aiuterà a localizzare il bug. –
Stai eseguendo lo script sul computer Windows o Linux? Se l'unità H: è una cartella condivisa di Samba, l'esecuzione della mia risposta Windows sulla macchina Windows potrebbe funzionare. In caso contrario, potrebbe essere necessario impostare le autorizzazioni nel file '/ etc/samba/smb.conf' nel server Linux. –
Sto eseguendo lo script in Windows. – Stefan