Pervardykite failus ir suteikite „Python“ scenarijaus vykdymo leidimą

Turinys

Šiame Python pamoka pažiūrėkime scenarijų, kuris bus pakeisti .txt išvaizdą į .sh failuose, taip pat suteiks naudotojui leidimus vykdyti. Šiai užduočiai mes naudosime modulius, kuriuos jau turime „Python“, scenarijus galioja ir 2.X, ir 3.X versijoms, nors išvestis šiek tiek skiriasi, elgsena nesikeičia, kaip pamatysime vėliau.

PastabaĮdiegtinas scenarijus skirtas naudoti UNIX operacinėse sistemose.

Pavyzdžiui, aš sukūriau aplanką su keliais failais, kai kurie turi .txt plėtinį, o kiti ne, taip pat yra failas test1.txt, kuriame yra maža komanda: ls -l. Tai yra patikrinti, ar jis iš tikrųjų įvykdytas, nes likusieji yra „lipnūs“, nes juose nėra duomenų. Aplanko turinį galima pamatyti šiame paveikslėlyje:

Jei darome a ls -l matome, kad nė vienas neturi vykdymo leidimų:

Dabar mes pamatysime visą kodą ir jis bus paaiškintas toliau.

 importuoti os, sys, stat iš subproceso importuoti Popen, PIPE, jei (len (sys.argv) <2): print ("Reikalingas kelias, kurio reikia ieškoti") sys.exit (0) elif (ne os.path.exists (sys.argv [1])):: print ("Nerasta:" + str (sys.argv [1])) sys.exit (0) process = Popen (["find", sys.argv [1]] , stdout = PIPE, stderr = PIPE) jei ne process.stderr.read (): num = 0 eilutei procese.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (".txt" in lineNew ir 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 spausdinimas („Darbas atliktas, pakeistas“, numeris, „failai“) else: print („Klaida“)
Pradėsime nuo kodo paaiškinimo žingsnis po žingsnio, pirmas dalykas, kurį mes darome, yra importuoti modulius, kurių mums prireiks.
 importuoti os, sys, stat iš subprocess import Popen, PIPE
Tada mes patikrinsime, ar mums buvo perduotas argumentas ir ar tai maršrutas, kad pamatytume, ar tęsiame scenarijų, ar ne.
 if (len (sys.argv) <2): print ("Reikalingas paieškos kelias") sys.exit (0) elif (ne os.path.exists (sys.argv [1]))): print ( "Nerasta:"+ str (sys.argv [1])) sys.exit (0)
Norėdami tęsti, mes naudojame Popen iš modulio papildomas procesas, mes fiksuojame standartinę išvestį ir klaidos išvestį, tai darome padedant Vamzdis, Vamzdis. Dabar galime skaityti iš dujotiekio, tarsi tai būtų failas.
 procesas = Popen (["rasti", sys.argv [1]], stdout = PIPE, stderr = PIPE)
Norėdami sužinoti, ar tęsti, patikriname, ar nėra klaidos (saugoma procesas.stderr), jei:
 jei ne process.stderr.read ():
Jei yra klaida, ji bus rodoma klaidos ekrane (tai yra filialas else, kuris neturi daugiau paaiškinimų) ir programa baigiasi. Jei ne, tai ką mes ketiname daryti, nuskaitome iš standartinio išvesties vamzdžio (stdout). Mes tai darome eilutėje po eilutės su, mes turime iššifruoti išvestį, šiuo atveju aš pasirenku UTF-8, nes naudojant ASCII jis duotų klaidų, pavyzdžiui, su kirčiais.

Jei nuolat žiūrime į ciklą, matome, kad patikriname, ar skaitymo eilutėje yra .txt, jei taip, taip pat patikrinama, ar tai failas (nesame suinteresuoti keisti aplanko, kuriame yra .txt). Jei tai tiesa, mes naudojame funkciją pakeisti iš „Python“ pakeisti .txt į .sh, o tada su modulio chmod funkcija suteikiame jums leidimus, kurie bus vykdymas, skaitymas ir rašymas vartotojui, skaitymas ir vykdymas grupei ir niekas kitiems. Kaip matote, mes naudojame stat modulį.

Kintamasis numeris, kurį matysite kode, yra tiesiog naudojamas norint sekti pakeistų failų skaičių ir galiausiai, kad galėtume rodyti informaciją ekrane.

 eilutei procese.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" in lineNew and os.path.isfile (lineNew)): new = lineNew. pakeisti (". 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
For ciklo pabaigoje mes parodome informaciją, apie kurią mes kalbame, čia rasite skirtumą tarp 2.x ir 3.x versijų, nes kableliai prieš ir po numerio 2 versijoje sąraše, o 3 -iajame rodomas normalus (be sąrašo).
 spausdinti („Atliktas darbas, pakeistas“, numeris, „failai“)
Tai galima pakeisti ir interpretuoti tą patį naudojant + ir kintamojo num konvertavimas į eilutę su funkcija str, arba per %, žemiau yra 2 kodai:
 print ("Atliktas darbas, pakeistas" + str (num) + "failai") print ("Atliktas darbas, pakeistas% d failas"% num)
Pirmasis būdas buvo parodyti, kad tarp „Python“ versijų yra pakeitimų (jie gali būti nedideli, kaip šiuo atveju, tačiau tai, kas veikia 3 versijoje, gali neveikti 2 versijoje ir atvirkščiai).

Dabar ir beveik baigdami pamoką, vykdysime kodą ir pažiūrėsime, kaip jis veikia, toliau paliksiu 2 vykdymo vaizdus, ​​naudodami „Python 3.x“ pirmame, o antrame „Python 2.x“:

Čia mes vertiname nedidelius skirtumus. Dabar pamatysime, kaip atrodo anksčiau matytas testavimo aplankas:

Keturi failai, turėję .txt, buvo pakeisti ir dabar turi .sh, atrodo, kad vykdomas tik test1.sh failas, nes likusieji neturi duomenų. Mes vykdysime failą test1.sh, kuris paleis tik ls -l kad mes sakėme, kad jame yra, ir tai padeda mums pamatyti leidimus.

Pamoka baigiasi čia, jei tai jus domina, nuoroda į dar viena pamoka apie Python: ieškoti pagal failo pavadinimą.

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave