Move-over Shell-Scripts: Sh.py is hier en het is geweldig.

Ik wed dat je niet wist dat je shell-scripts in Python kon schrijven: sh.py stelt je in staat om programma's aan te roepen, parameters door te geven en uitgangen af ​​te handelen.

Ik wed dat je niet wist dat je shell-scripts in Python kon schrijven: sh.py stelt je in staat om programma's aan te roepen, parameters door te geven en uitgangen af ​​te handelen.
Advertentie

Ik wed dat je niet wist dat je shell-scripts in Python kon schrijven.

Voor elke programmeur of systeembeheerder is shell scripting een essentiële vaardigheid om te beheersen. Hiermee kunt u vervelende taken automatiseren en ze in consistente, herhaalbare acties veranderen. Het probleem is dat het een beetje ontmoedigend kan zijn, vooral als je bedenkt dat de meeste shell-scripting dialecten de syntactische finesse missen die te vinden is in de wil van Python en Ruby.

Ik zal zelfs botter zijn. De meeste shellscripts zijn lelijker dan de gemiddelde pug.

shpy-pug

Verder is er een verscheidenheid aan shells beschikbaar voor UNIX-achtige platforms, waaronder Bash, CSH, KSH en (mijn favoriete) FISH. Het schrijven van consistente shell-scripts die op elk platform werken, kan daarom een ​​uitdaging zijn.

Er moet een betere manier zijn, toch?

Introductie van sh.py

Er bestaat. Wanneer ik niet schrijf voor MakeUseOf, schrijf ik code in Python voor plezier en winst. Ik vind Python erg leuk vanwege de flexibiliteit, de inherente schoonheid en de manier waarop het het schrijven van goede code per ontwerp verplicht stelt. Als dat goed voor je klinkt, maar je deze geweldige taal nog niet kent, kijk dan eens naar deze vijf fantastische websites om Python te leren programmeren. De 5 beste websites om Python te leren programmeren De 5 beste websites om Python te leren programmeren het afgelopen decennium is de programmeertaal van Python enorm gegroeid onder programmeurs in alle codeergebieden. Van webontwikkelaars tot ontwerpers van videogames tot in-house tools, veel mensen zijn gevallen in ... Lees meer?

Ik kwam deze echt geweldige bibliotheek tegen die een paar maanden geleden sh.py heette, waarmee je programma's kunt bellen, parameters kunt doorgeven en uitgangen kunt verwerken, allemaal binnen de grenzen van een Python-programma.

Wat betekent dit? Simpel gezegd betekent dit dat u de volledige functionaliteit van shell-scripts hebt, maar vanuit een taal die gemakkelijk te lezen is, modulair van aard is en objectgeoriënteerd programmeren ondersteunt. Cool toch?

Dus, hoe gebruiken we het?

Ik maak een paar aannames over jou. De eerste is dat je Linux, OS X of FreeBSD gebruikt. Zoals het nu is, werkt sh.py niet op Windows. Indien nodig kunt u echter altijd een virtuele Linux-machine installeren. Mijn collega Justin Pot heeft hier een behoorlijk nuttig artikel over geschreven, dat u hier kunt lezen. Hoe VirtualBoxes te gebruiken Gratis afbeeldingen om Open Source-besturingssystemen te testen en uit te voeren [Linux] Hoe VirtualBoxes te gebruiken Gratis afbeeldingen om Open Source-besturingssystemen te testen en uit te voeren [Linux] Probeer snel een breed scala aan open source besturingssystemen uit, waarvan u sommige kent en sommige niet. U kunt nu gaan browsen op Virtualboxes, een website die bijna alles uit handen neemt ... Lees meer.

De tweede veronderstelling die ik maak is dat je een recente versie van Python draait (ofwel 2.7 of 3.2) en je hebt de PIP-pakketbeheerder geïnstalleerd. Als dit niet het geval is, bekijk dan de officiële Python-documentatie.

Alles goed? Dan gaan we verder.

Laten we beginnen met coderen

Installeer sh.py in een terminal met de volgende opdracht.

 sudo pip install sh 

De reden waarom we 'sudo' hier gebruiken is omdat we onze rechten moeten verhogen om nieuwe Python-pakketten toe te voegen. Als sh.py correct wordt geïnstalleerd, ziet u de volgende regels in uw terminal.

 Downloaden / uitpakken sh Downloaden sh-1.09.tar.gz Setup.py egg_info uitvoeren voor pakket sh Verzamelde pakketten installeren: sh Setup.py uitvoeren voor sh geïnstalleerd Installatie geslaagd Sh opschonen ... 

Als het dit niet zegt, is de kans groot dat uw installatie is mislukt. Sad. Als dat het geval is, probeer dan uw rechten te controleren en dat u PIP hebt geïnstalleerd. Als het er nog steeds niet is, stel dan de vraag over Stack Overflow (waarover eerder is gesproken 10 Websites die de beginners programmeur kunnen helpen met voorbeeldcodefragmenten 10 Websites die de beginner-programmeur kunnen helpen met voorbeeldcodefragmenten Lees meer door onze internetredacteur, Saikat Basu ) of MakeUseOf-antwoorden.

Nu dat gesorteerd is, maak een nieuwe map aan. Hier plaatsen we al onze code. Open een teksteditor en maak een bestand met de naam 'shtest.py'. Hier gaan we eenvoudigweg een nieuw bestand maken en vervolgens de inhoud van de map weergeven waarin we ons bevinden. Klinkt goed?

Voeg in shtest.py de volgende regels toe.

shpy-shtest

 #! / usr / bin / env python import sh 
 sh.touch ('hallo') print (sh.ls ('- l')) 

Simpele dingen hier. Laten we dit opsplitsen.

 #! / usr / bin / env python 

Deze regel wordt hash-bang genoemd en geeft je shell opdracht om dit bestand als een Python-programma te openen. Hiermee kun je het openen zoals je een shell-script zou doen (./shtest.py), in plaats van het direct te openen met Python (python shtest.py). Cool toch?

 import sh 

Deze regel importeert de sh-bibliotheek die we enkele ogenblikken geleden hebben geïnstalleerd. We kunnen niet verder zonder dit, dus zorg ervoor dat het in uw code staat!

 sh.touch ( 'hallo') 

Je bent misschien bekend met de Linux-opdracht 'aanraken'. Hiermee wordt een leeg bestand gemaakt met de bestandsnaam die u opgeeft. Hier bellen we rechtstreeks 'aanraking' vanuit Python. Zoals je kunt zien, hebben we dit voorafgegaan door 'sh.', En we geven het een parameter van 'hallo' door.

 afdrukken (sh.ls ( '- l')) 

U bent wellicht bekend met de opdracht 'afdrukken', die tekst naar de console uitvoert. Hier geven we het 'sh.ls' door als parameter. Dit roept het Linux ls-programma op, dat de inhoud van een map weergeeft. We geven ook een parameter door van '-l', die gedetailleerdere informatie afdrukt over de inhoud van de directory waarin we dit uitvoeren.

Werkt het? Kijk zelf maar.

shpy-shtest-works

Degenen onder jullie met haviksogen zullen zien dat er een ander bestand rondzweven in die map genaamd 'gitsh.py'. Wat kan daar mogelijk zijn?

Sub-opdrachten

sh.py heeft een aantal hooks voor populaire programma's die al zijn ingebakken. Deze omvatten git, sudo en een aanzienlijk aantal Linux-hulpprogramma's. Deze maken interactie met deze services vanuit Python nog eenvoudiger.

Hoe makkelijk? Welnu, ik ga je tonen hoe je een lege Git repository initialiseert in slechts drie regels code. Maak eerst een bestand met de naam 'gitsh.py' en open het in je favoriete teksteditor.

Schrijf binnen de volgende drie regels in.

shpy-gitsh #! / usr / bin / env python uit sh import git print (git.init ()) 

Het meeste hiervan zou je redelijk bekend moeten zijn. Je zult merken dat we 'git' uit 'sh' hebben geïmporteerd. Dit betekent alleen dat we een specifiek stuk functionaliteit uit een module hebben geïmporteerd, terwijl we al het andere hebben genegeerd.

Daarna initialiseren we onze repository.

 afdrukken (git.init ()) 

We hebben het gehad over afdrukken. Je zou moeten opmerken dat we 'git' noemen zonder '.sh' om het verder te zetten. Dit komt omdat we de git-functionaliteit van de 'sh'-bibliotheek specifiek hebben geïmporteerd.

shpy-gitsh-works

En dat is het zo'n beetje. Wanneer we gitsh.py uitvoeren, zouden de volgende regels in uw terminal moeten verschijnen.

Conclusie

Dat was een redelijk eenvoudige inleiding tot sh.py. Als je er meer over wilt weten, bekijk dan hier de officiële documentatie. Als je echter vastloopt, stuur me dan hieronder een opmerking en ik zal proberen je te helpen.

In this article