Flytta över Shell-skript: Sh.py är här, och det är fantastiskt.
Jag slår vad om att du inte visste att du kunde skriva skalskript i Python.
För alla programmerare eller systemadministratörer är skalskript en viktig färdighet att bemästra. Det låter dig automatisera tråkiga uppgifter och förvandla dem till konsekventa, repeterbara åtgärder. Problemet är att det kan vara lite skrämmande, särskilt när man betänker att de flesta skalskriptade dialekter saknar den syntaktiska finess som finns i sådana som Python och Ruby.
Jag ska vara ännu rakare. De flesta skalskript är fulare än en genomsnittlig mops.
Dessutom finns det en mängd olika skal tillgängliga för UNIX-liknande plattformar, inklusive Bash, CSH, KSH och (min favorit) FISH. Som ett resultat kan det vara utmanande att skriva konsekventa skalskript som fungerar på alla plattformar.
Det måste finnas ett bättre sätt, eller hur?
Vi presenterar sh.py
Det finns. När jag inte skriver för MakeUseOf skriver jag kod i Python för skojs skull och för att tjäna pengar. Jag gillar verkligen Python på grund av dess flexibilitet, dess inneboende skönhet och hur det kräver att man skriver bra kod genom design. Om det låter bra för dig, men du inte redan kan detta fantastiska språk, varför kollar du inte in dessa fem fantastiska webbplatser för att lära dig Python-programmering?
Jag stötte på detta riktigt häftiga bibliotek för några månader sedan som heter sh.py, som låter dig anropa program, skicka parametrar och hantera utdata, allt inom gränserna för ett Python-program.
Så vad betyder detta? Enkelt uttryckt betyder det att du har full funktionalitet av skalskript, men inifrån ett språk som är lätt att läsa, är modulärt till sin natur och stöder objektorienterad programmering. Coolt, eller hur?
Så hur använder vi det?
Jag gör några antaganden om dig. Den första är att du kör Linux, OS X eller FreeBSD. Som det är just nu fungerar inte sh.py på Windows. Men om det behövs kan du alltid installera en virtuell Linux-maskin. Min kollega Justin Pot har skrivit en ganska användbar artikel om detta, som du kan kolla in här .
Det andra antagandet jag gör är att du kör en ny version av Python (antingen 2.7 eller 3.2) och att du har PIP-pakethanteraren installerad. Om så inte är fallet, ta en titt på den officiella Python-dokumentationen.
Allt väl? Sedan fortsätter vi.
Låt oss börja koda
Installera sh.py i en terminal med följande kommando.
sudo pip install sh
Anledningen till att vi använder ‘sudo’ här är för att vi behöver höja våra behörigheter för att lägga till nya Python-paket. Om sh.py installeras korrekt, kommer du att se följande rader i din terminal.
Downloading/unpacking sh
Downloading sh-1.09.tar.gz
Running setup.py egg_info for package sh
Installing collected packages: sh
Running setup.py install for sh
Successfully installed sh
Cleaning up…
Om det inte står detta är oddsen goda att din installation misslyckades. Ledsen. Om så är fallet, försök att kontrollera dina behörigheter och att du faktiskt har installerat PIP. Om det fortfarande inte finns där, försök att fråga på Stack Overflow (som tidigare har diskuterats av vår Internetredaktör, Saikat Basu) eller MakeUseOf Answers.
Nu är det ordnat, skapa en ny katalog. Det är här vi ska placera all vår kod. Öppna en textredigerare och skapa en fil som heter ‘shtest.py’. Här kommer vi helt enkelt att skapa en ny fil och sedan lista innehållet i katalogen vi är i. Låter det bra?
I shtest.py, lägg till följande rader.
#!/usr/bin/env python
import sh
sh.touch('hello')
print(sh.ls(‘-l'))
Enkla saker här. Låt oss bryta ner det här.
#!/usr/bin/env python
Den här raden kallas hash-bang och instruerar ditt skal att öppna den här filen som ett Python-program. Detta gör att du kan öppna det som ett skalskript (./shtest.py), istället för att öppna det direkt med Python (python shtest.py). Coolt, eller hur?
import sh
Den här raden importerar sh-biblioteket som vi installerade för några ögonblick sedan. Vi kan inte fortsätta utan detta, så se till att det finns i din kod!
sh.touch('hello')
Du kanske är bekant med Linux-kommandot “touch”. Detta skapar en tom fil med filnamn som du anger. Här kallar vi direkt “touch” inifrån Python. Som du kan se har vi inledt det här med ‘sh.’, och vi skickar det till parametern ‘hej’.
print(sh.ls(‘-l'))
Du kanske är bekant med kommandot “skriv ut”, som matar ut text till konsolen. Här skickar vi det ‘sh.ls’ som en parameter. Detta anropar Linux ls-programmet, som listar innehållet i en katalog. Vi skickar också den parametern ‘-l’, som skriver ut mer detaljerad information om innehållet i katalogen vi kör detta i.
De av er med hökögon kommer att märka att det finns en annan fil som flyter omkring i den katalogen som heter ‘gitsh.py’. Vad kan finnas där inne?
Underkommandon
sh.py har några krokar för populära program som redan är inbakade. Dessa inkluderar git, sudo och ett betydande antal Linux-verktyg. Dessa gör det ännu lättare att interagera med dessa tjänster från Python.
Hur enkelt? Tja, jag ska visa dig hur du initierar ett tomt Git-förråd på bara tre rader kod. Skapa först en fil som heter ‘gitsh.py’ och öppna den i din favorittextredigerare.
Skriv följande tre rader inuti.
#!/usr/bin/env python
from sh import git
print(git.init())
Det mesta av detta borde vara ganska bekant för dig. Du kommer att märka att vi importerade ‘git’ från ‘sh’. Detta betyder bara att vi har importerat en specifik funktionalitet från en modul, samtidigt som vi ignorerar allt annat.
Efter det initierar vi vårt arkiv.
print(git.init())
Vi har pratat om tryck. Du bör märka att vi anropar ‘git’ utan att ‘.sh’ fortsätter. Detta beror på att vi specifikt importerade git-funktionaliteten från ‘sh’-biblioteket.
Och det är ungefär det. När vi kör gitsh.py bör vi se följande rader visas i din terminal.
Slutsats
Det var en ganska enkel introduktion till sh.py. Om du är sugen på att lära dig mer om det, kolla in den officiella dokumentationen här. Men om du fastnar, känn efter free lämna en kommentar nedan så ska jag försöka hjälpa dig.
Om författaren
Matthew Hughes (383 artiklar publicerade)
Matthew Hughes är en mjukvaruutvecklare och författare från Liverpool, England. Han hittas sällan utan en kopp starkt svart kaffe i handen och fullkomligt avgudar sin Macbook Pro och sin kamera. Du kan läsa hans blogg på http://www.matthewhughes.co.uk och följa honom på twitter på @matthewhughes.