Rinomina i file e concedi l'autorizzazione all'esecuzione dello script Python

Sommario

In questo Tutorial su Python vediamo uno script che lo farà cambia l'aspetto di .txt in .sh nei filee fornirà anche le autorizzazioni di esecuzione per l'utente. Per questo compito utilizzeremo i moduli che abbiamo già in Python, lo script è valido sia per la versione 2.X che per la 3.X, sebbene l'output sia leggermente diverso, il comportamento non cambia, come vedremo in seguito.

NotaLo script da implementare è per l'uso su sistemi operativi UNIX.

Per l'esempio ho creato una cartella con diversi file, alcuni hanno un'estensione .txt e altri no, e c'è anche un file chiamato test1.txt che ha un piccolo comando: ls -l. Serve per verificare che sia effettivamente eseguito, poiché il resto è "appiccicoso" in quanto non contiene dati. Il contenuto della cartella è visibile nell'immagine seguente:

Se facciamo un ls -l vediamo che nessuno ha i permessi di esecuzione:

Ora vedremo il codice completo e verrà spiegato di seguito.

 import os, sys, stat from subprocess import Popen, PIPE if (len (sys.argv) <2): print ("Il percorso da cercare è obbligatorio") sys.exit (0) elif (non os.path.exists ( sys.argv [1])): print ("Non trovato:" + str (sys.argv [1])) sys.exit (0) process = Popen (["find", sys.argv [1]] , stdout = PIPE, stderr = PIPE) if not process.stderr.read(): num = 0 for line in process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip() if (".txt" in lineNew e os.path.isfile (lineNew)): new = lineNew.replace (". txt", ". sh") os.rename (lineNew, new) os.chmod (new, stat. S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1 print ("Lavoro svolto, modificato", num, "file") else: print ("Errore")
Inizieremo con la spiegazione del codice passo dopo passo, la prima cosa che facciamo è importare i moduli di cui avremo bisogno.
 import os, sys, stat from subprocess import Popen, PIPE
Quindi controlleremo se ci è stato passato un argomento ed è un percorso, per vedere se continuiamo con lo script o meno.
 if (len (sys.argv) <2): print ("Il percorso da cercare è obbligatorio") sys.exit (0) elif (non os.path.exists (sys.argv [1])): print ( " Non trovato: "+ str (sys.argv [1])) sys.exit (0)
Per continuare usiamo Popen del modulo sottoprocesso, acquisiamo l'output standard e l'output di errore, lo facciamo con l'aiuto di TUBO, Una pipa. Ora possiamo leggere dalla pipeline come se fosse un file.
 processo = Popen (["trova", sys.argv [1]], stdout = PIPE, stderr = PIPE)
Per sapere se continuare, controlliamo se c'è un errore (memorizzato in process.stderr) con quanto segue se:
 se non process.stderr.read():
Se c'è un errore, verrà visualizzato nella schermata Error (questo è per il ramo else, che non ha ulteriori spiegazioni) e il programma termina. In caso contrario, quello che faremo è leggere dalla pipe di output standard (stdout). Lo facciamo riga per riga con un for, dobbiamo decodificare l'output, in questo caso opto per UTF-8, poiché con ASCII darebbe errori con gli accenti per esempio.

Se continuiamo a guardare il ciclo for, vediamo che controlliamo se la riga letta contiene .txt, in tal caso viene anche controllato che sia un file (non ci interessa cambiare una cartella che contiene .txt). Se questo è vero, usiamo la funzione sostituire di Python per cambiare .txt in .sh, e poi con la funzione chmod del modulo ti diamo i permessi, che saranno esecuzione, lettura e scrittura per l'utente, lettura ed esecuzione per il gruppo e niente per gli altri. Come puoi vedere, utilizziamo il modulo stat.

La variabile num che avrai visto nel codice serve semplicemente per tenere traccia del numero di file che cambiamo e quindi alla fine per poter visualizzare le informazioni sullo schermo.

 for line in process.stdout.readlines(): lineNew = line.decode ("UTF-8"). strip() if (. txt" in lineNew e os.path.isfile (lineNew)): new = lineNew. replace (. txt", ". sh") os.rename (lineNew, new) os.chmod (new, stat.S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1
Alla fine del ciclo for, quello che facciamo è mostrare le informazioni di cui stiamo parlando, qui è dove troveremo la differenza tra la versione 2.x e 3.x, poiché le virgole prima e dopo num nella versione 2 la separano in una lista e nella 3 ti mostra normale (senza lista).
 print ("Lavoro svolto, modificato", num, "file")
Questo può essere cambiato per essere interpretato allo stesso modo usando il + e convertendo la variabile num in una stringa con la funzione str, o attraverso %, di seguito i 2 codici:
 print ("Lavoro svolto, modificato" + str (num) + "files") print ("Lavoro svolto, modificato% d file"% num)
È stato lasciato nel primo modo mostrare che tra le versioni di Python ci sono cambiamenti (possono essere piccoli come in questo caso, ma qualcosa che funziona nella versione 3 potrebbe non funzionare nella versione 2 e viceversa).

Ora e quasi per finire il tutorial eseguiremo il codice e vediamo come funziona, di seguito lascio 2 immagini dell'esecuzione, utilizzando Python 3.x nel primo, e nel secondo Python 2.x:

Qui apprezziamo le lievi differenze. Ora vedremo come appare la cartella di test che abbiamo visto prima:

I 4 file che avevano .txt sono stati modificati e ora hanno .sh, sembra che solo il file test1.sh sia eseguibile, questo perché il resto non contiene dati. Eseguiremo il file test1.sh, che avvierà solo il ls -l che abbiamo detto che conteneva, e quindi ci aiuta a vedere i permessi.

Il tutorial finisce qui, nel caso interessasse, un link a un altro tutorial su Python: ricerca per nome file.

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo
wave wave wave wave wave