Preimenujte datoteke i dajte dopuštenje za izvršavanje skripte Python

Sadržaj

U ovom Python vodič da vidimo skriptu koja će promijenite izgled .txt u .sh u datotekama, a korisniku će također dati dopuštenja za izvršavanje. Za ovaj ćemo zadatak koristiti module koje već imamo u Pythonu, skripta vrijedi i za verzije 2.X i za 3.X, iako je izlaz nešto drugačiji, ponašanje se ne mijenja, kao što ćemo vidjeti kasnije.

BilješkaSkripta koju treba implementirati koristi se na UNIX operativnim sustavima.

Na primjer, stvorio sam mapu s nekoliko datoteka, neke imaju .txt ekstenziju, a druge nemaju, a postoji i datoteka pod nazivom test1.txt koja ima malu naredbu: ls -l. On treba provjeriti je li doista izvršen, budući da su ostali "ljepljivi" jer ne sadrže podatke. Sadržaj mape možete vidjeti na sljedećoj slici:

Ako učinimo a ls -l vidimo da nitko nema dopuštenja za izvršenje:

Sada ćemo vidjeti cijeli kod i bit će objašnjeno u nastavku.

 import os, sys, stat iz potprocesa import Popen, PIPE if (len (sys.argv) <2): print ("Potreban je put za traženje") sys.exit (0) elif (ne os.path.exists (sys.argv [1])): print ("Nije pronađeno:" + str (sys.argv [1])) sys.exit (0) process = Popen (["find", sys.argv [1]] , stdout = PIPE, stderr = PIPE) ako nije process.stderr.read (): num = 0 za red u procesu.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (".txt" u lineNew i 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) broj + = 1 ispis ("Rad je obavljen, promijenjen", broj, "datoteke") else: print ("Pogreška")
Počet ćemo s objašnjenjem koda korak po korak, prvo što ćemo učiniti je uvesti module koji će nam biti potrebni.
 uvoz os, sys, stat iz potprocesa uvoz Popen, CIJEV
Zatim ćemo provjeriti je li nam proslijeđen argument i je li to put, da vidimo nastavljamo li sa skriptom ili ne.
 if (len (sys.argv) <2): print ("Potreban je put za traženje") sys.exit (0) elif (ne os.path.exists (sys.argv [1])): print ( "Nije pronađeno:"+ str (sys.argv [1])) sys.exit (0)
Za nastavak koristimo Popen modula potproces, snimamo standardni izlaz i izlaz pogreške, to radimo uz pomoć CIJEV, Cijev. Sada možemo čitati iz cjevovoda kao da je datoteka.
 process = Popen (["find", sys.argv [1]], stdout = PIPE, stderr = PIPE)
Da bismo saznali treba li nastaviti, provjeravamo postoji li pogreška (pohranjena u proces.stderr) sa sljedećim ako:
 ako nije process.stderr.read ():
Ako postoji pogreška, bit će prikazana na zaslonu Greška (ovo je za drugu granu koja nema daljnje objašnjenje) i program će se završiti. Ako ne, ono što ćemo učiniti očitavamo iz standardne izlazne cijevi (stdout). Radimo to redak po redak s for, moramo dekodirati izlaz, u ovom slučaju ja se odlučujem za UTF-8, jer bi s ASCII-om dao greške s akcentima, na primjer.

Ako nastavimo gledati for petlju, vidimo da provjeravamo sadrži li pročitani redak .txt, ako je tako, provjerava se i da li je to datoteka (nismo zainteresirani za promjenu mape koja sadrži .txt). Ako je to točno, koristimo funkciju zamijeniti Pythona za promjenu .txt u .sh, a zatim s chmod funkcijom modula dajemo vam dopuštenja, a to će biti izvršavanje, čitanje i pisanje za korisnika, čitanje i izvršavanje za grupu, a drugima ništa. Kao što vidite, koristimo stat modul.

Varijabla broj koju ćete vidjeti u kodu jednostavno se koristi za praćenje broja datoteka koje mijenjamo i tako na kraju za prikaz informacija na ekranu.

 za liniju u procesu.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" u lineNew i 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) broj + = 1
Na kraju for petlje, ono što radimo je pokazivanje informacija o kojima govorimo, tu ćemo pronaći razliku između verzija 2.x i 3.x, budući da zarezi prije i poslije num u verziji 2 dijele na popisu i na 3 prikazuje normalno (bez popisa).
 print ("Rad obavljen, promijenjen", broj, "datoteke")
To se može promijeniti kako bi se isto tumačilo pomoću + i pretvaranje varijable num u niz s funkcijom str, ili kroz %, ispod su 2 koda:
 print ("Rad obavljen, promijenjeno" + str (num) + "datoteke") print ("Rad obavljen, promijenjeno% d datoteka"% num)
Na prvi način je ostavljeno da se pokaže da između verzija Pythona postoje promjene (one mogu biti male kao u ovom slučaju, ali nešto što radi u verziji 3 možda neće raditi u verziji 2, i obrnuto).

Sada i skoro da završimo vodič, izvršit ćemo kôd i vidjeti kako radi, ispod ostavljam 2 slike izvršenja, koristeći Python 3.x u prvom, a u drugom Pythonu 2.x:

Ovdje cijenimo male razlike. Sada ćemo vidjeti kako izgleda mapa za testiranje koju smo vidjeli prije:

Četiri datoteke koje su imale .txt promijenjene su i sada imaju .sh, čini se da je samo datoteka test1.sh izvršna, to je zato što ostale ne sadrže podatke. Izvršit ćemo datoteku test1.sh, koja će pokrenuti samo ls -l da smo rekli da sadrži, pa nam pomaže da vidimo dopuštenja.

Vodič završava ovdje, u slučaju da vas zanima, poveznicom do još jedan vodič o Pythonu: pretraživanje prema nazivu datoteke.

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave