Přejmenujte soubory a udělte oprávnění ke spuštění skriptu Python

Obsah

V tomhle Výukový program pro Python podívejme se na skript, který bude změnit vzhled souboru .txt na .sh v souborech, a také udělí uživateli oprávnění ke spuštění. Pro tento úkol použijeme moduly, které již v Pythonu máme, skript je platný pro verzi 2.X i 3.X, přestože se výstup mírně liší, chování se nemění, jak uvidíme později.

PoznámkaSkript, který má být implementován, je určen pro použití v operačních systémech UNIX.

Pro příklad jsem vytvořil složku s několika soubory, některé mají příponu .txt a jiné ne, a existuje také soubor s názvem test1.txt, který má malý příkaz: ls -l. Je ověřit, že je skutečně spuštěn, protože zbytek je „lepkavý“, protože neobsahuje data. Obsah složky je vidět na následujícím obrázku:

Pokud uděláme a ls -l vidíme, že nikdo nemá oprávnění ke spuštění:

Nyní uvidíme kompletní kód a bude vysvětleno níže.

 import os, sys, stat from subprocess import Popen, PIPE if (len (sys.argv) <2): print ("The path to look for is required") sys.exit (0) elif (not os.path.exists (sys.argv [1])): print ("Nenalezeno:" + str (sys.argv [1])) sys.exit (0) process = Popen (["find", sys.argv [1]] , stdout = PIPE, stderr = PIPE) pokud ne process.stderr.read (): num = 0 pro řádek v process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () pokud (".txt" v lineNew a os.path.isfile (lineNew)): new = lineNew.replace (". txt", ". sh") os.rename (lineNew, nový) os.chmod (nový, stat. S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1 tisk („Práce dokončena, změněno“, počet, „soubory“) else: tisk („Chyba“)
Začneme vysvětlením kódu krok za krokem, první věcí, kterou uděláme, je import modulů, které budeme potřebovat.
 import os, sys, stat z podprocesu import Popen, PIPE
Poté zkontrolujeme, zda nám byl předán argument a je to trasa, abychom zjistili, zda budeme pokračovat ve skriptu nebo ne.
 if (len (sys.argv) <2): print ("Cesta k hledání je vyžadována") sys.exit (0) elif (not os.path.exists (sys.argv [1])): print ( "Nenalezeno:"+ str (sys.argv [1])) sys.exit (0)
K pokračování používáme Popen modulu podproces, zachycujeme standardní výstup a chybový výstup, děláme to pomocí TRUBKA, Trubka. Nyní můžeme číst z potrubí, jako by to byl soubor.
 process = Popen (["find", sys.argv [1]], stdout = PIPE, stderr = PIPE)
Abychom věděli, zda pokračovat, zkontrolujeme, zda nedošlo k chybě (uložené v process.stderr) s následujícím, pokud:
 pokud ne process.stderr.read ():
Pokud dojde k chybě, zobrazí se na obrazovce Chyba (to platí pro větev else, která nemá další vysvětlení) a program skončí. Pokud ne, budeme číst ze standardního výstupního potrubí (standardní výstup). Děláme to řádek po řádku pomocí for, musíme dekódovat výstup, v tomto případě jsem se rozhodl pro UTF-8, protože s ASCII by to například dávalo chyby s akcenty.

Pokud se stále díváme na smyčku for, vidíme, že zkontrolujeme, zda přečtený řádek obsahuje .txt, pokud ano, je také zkontrolováno, že se jedná o soubor (nemáme zájem měnit složku, která obsahuje .txt). Pokud je to pravda, použijeme funkci nahradit Pythonu změnit .txt na .sh a poté s funkcí chmod modulu vám dáme oprávnění, což bude provádění, čtení a zápis pro uživatele, čtení a provádění pro skupinu a nic pro ostatní. Jak vidíte, používáme modul statistik.

Proměnná num, kterou uvidíte v kódu, se jednoduše používá ke sledování počtu souborů, které měníme, a tedy nakonec k zobrazení informací na obrazovce.

 pro řádek v process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" v lineNew a os.path.isfile (lineNew)): new = lineNew. nahradit (". 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
Na konci smyčky for ukážeme informace, o kterých mluvíme. Zde najdeme rozdíl mezi verzí 2.x a 3.x, protože čárky před a za num ve verzi 2 ji rozdělují v seznamu a ve 3 vám ukáže normální (bez seznamu).
 tisk ("Provedená práce, změněno", počet, "soubory")
Toto lze změnit tak, aby bylo interpretováno stejně pomocí + a převod proměnné num na řetězec s funkcí str, nebo prostřednictvím %, níže jsou 2 kódy:
 tisk ("Práce dokončena, změněno" + str (počet) + "soubory") tisk ("Práce dokončena, změněno% d souborů"% počtu)
Prvním způsobem bylo ponecháno ukázat, že mezi verzemi Pythonu dochází ke změnám (mohou být malé jako v tomto případě, ale něco, co funguje ve verzi 3, nemusí fungovat ve verzi 2 a naopak).

Nyní a téměř k dokončení tutoriálu spustíme kód a uvidíme, jak to funguje, níže ponechávám 2 obrázky provedení, přičemž v prvním používám Python 3.x a ve druhém Pythonu 2.x:

Zde oceňujeme drobné rozdíly. Nyní uvidíme, jak vypadá testovací složka, kterou jsme viděli předtím:

4 soubory s příponou .txt byly změněny a nyní mají .sh, zdá se, že je spustitelný pouze soubor test1.sh, protože ostatní neobsahují data. Spustíme soubor test1.sh, který spustí pouze soubor ls -l že jsme řekli, že to obsahuje, a tak nám to pomáhá vidět oprávnění.

Zde tutoriál končí, v případě zájmu odkaz na další tutoriál o Pythonu: vyhledávání podle názvu souboru.

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave