Omdøb filer og giv tilladelse til udførelse af Python -script

Indholdsfortegnelse

I dette Python tutorial lad os se et script, der vil ændre udseendet af .txt til .sh i filer, og det vil også give udførelsestilladelser for brugeren. Til denne opgave skal vi bruge moduler, som vi allerede har i Python, scriptet er gyldigt for både version 2.X og 3.X, selvom output er lidt anderledes, ændres adfærden ikke, som vi vil se senere.

BemærkScriptet, der skal implementeres, er til brug på UNIX -operativsystemer.

For eksempel har jeg oprettet en mappe med flere filer, nogle har en .txt -udvidelse, og andre har ikke, og der er også en fil kaldet test1.txt, der har en lille kommando: ls -l. Det er for at kontrollere, at det faktisk er udført, da resten er "klæbrige", da de ikke indeholder data. Mappens indhold kan ses på følgende billede:

Hvis vi laver en ls -l vi ser, at ingen har udførelsestilladelser:

Nu skal vi se den komplette kode, og den vil blive forklaret nedenfor.

 import os, sys, stat fra delproces import Popen, PIPE if (len (sys.argv) <2): print ("Den sti, der skal søges efter, er påkrævet") sys.exit (0) elif (ikke os.path.exists (sys.argv [1])): print ("Ikke fundet:" + str (sys.argv [1])) sys.exit (0) process = Popen (["find", sys.argv [1]] , stdout = PIPE, stderr = PIPE) hvis ikke process.stderr.read (): num = 0 for linje i process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () hvis (".txt" i lineNew og os.path.isfile (lineNew)): new = lineNew.replace (". txt", ". sh") os.rename (lineNew, new) os.chmod (ny, stat. S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1 udskrift ("Udført, ændret", num, "filer") ellers: print ("Fejl")
Vi kommer til at starte med forklaringen på koden trin for trin, den første ting vi gør, er at importere de moduler, vi får brug for.
 import os, sys, stat fra delproces import Popen, PIPE
Derefter vil vi kontrollere, om vi er blevet bestået et argument, og det er en rute, for at se, om vi fortsætter med scriptet eller ej.
 hvis (len (sys.argv) <2): print ("Stien, der skal søges efter, er påkrævet") sys.exit (0) elif (ikke os.path.exists (sys.argv [1])): print ( "Ikke fundet:"+ str (sys.argv [1])) sys.exit (0)
For at fortsætte bruger vi Popen af modulet delproces, vi fanger standardoutput og fejloutput, vi gør dette ved hjælp af RØR, Et rør. Nu kan vi læse fra pipelinen som om det var en fil.
 proces = Popen (["find", sys.argv [1]], stdout = PIPE, stderr = PIPE)
For at vide, om vi skal fortsætte, kontrollerer vi, om der er en fejl (gemt i process.stderr) med følgende hvis:
 hvis ikke process.stderr.read ():
Hvis der er en fejl, vises den på fejlskærmen (dette er for den anden filial, som ikke har nogen yderligere forklaring), og programmet slutter. Hvis ikke, er det, vi skal gøre, at læse fra standardudgangsrøret (stdout). Vi gør det linje for linje med en for, vi skal afkode output, i dette tilfælde vælger jeg UTF-8, da det med ASCII ville give fejl med accenter for eksempel.

Hvis vi bliver ved med at kigge på for -løkken, ser vi, at vi kontrollerer, om den læste linje indeholder .txt, hvis det også er kontrolleret, at det er en fil (vi er ikke interesseret i at ændre en mappe, der indeholder .txt). Hvis dette er sandt, bruger vi funktionen erstatte af Python for at ændre .txt til .sh, og derefter med modulets chmod -funktion giver vi dig tilladelser, som vil være udførelse, læsning og skrivning for brugeren, læsning og udførelse for gruppen og intet for andre. Som du kan se, bruger vi stat -modulet.

Variablen num, som du vil have set i koden, bruges ganske enkelt til at holde styr på antallet af filer, vi ændrer og dermed i sidste ende for at kunne vise oplysninger på skærmen.

 for linje i process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" i lineNew og os.path.isfile (lineNew)): new = lineNew. erstat (". txt", ". sh") os.rename (lineNew, new) os.chmod (ny, stat.S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1
I slutningen af ​​for loop, hvad vi gør, er at vise de oplysninger, vi taler om, det er her, vi finder forskellen mellem version 2.x og 3.x, da kommaerne før og efter num i version 2 deler det i en liste og i 3 viser den dig normal (uden liste).
 print ("Udført arbejde, ændret", num, "filer")
Dette kan ændres til at blive fortolket det samme ved hjælp af + og konvertere variablen num til en streng med funktionen str, eller igennem %, herunder er de 2 koder:
 print ("Udført arbejde, ændret" + str (num) + "filer") print ("Udført, ændret% d filer"% num)
Det blev efterladt på den første måde for at vise, at mellem versioner af Python er der ændringer (de kan være små som i dette tilfælde, men noget, der fungerer i version 3, fungerer muligvis ikke i version 2 og omvendt).

Nu og næsten for at afslutte selvstudiet skal vi eksekvere koden og se, hvordan den fungerer, herunder efterlader jeg 2 billeder af udførelsen ved hjælp af Python 3.x i den første og i den anden Python 2.x:

Her sætter vi pris på de små forskelle. Nu skal vi se, hvordan testmappen, som vi så før, ser ud:

De 4 filer, der havde .txt, er blevet ændret og har nu .sh, det ser ud til, at kun test1.sh -filen er eksekverbar, det skyldes, at resten ikke indeholder data. Vi vil køre filen test1.sh, som kun starter ls -l at vi sagde, at den indeholdt, og det hjælper os derfor med at se tilladelserne.

Tutorialen slutter her, hvis det er af interesse, et link til en anden tutorial om Python: søg efter filnavn.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave