Írásban szkripteket python, és lehetséges, hogy cserélje ki őket bash

Írásban szkripteket Python és ez lehet helyettesíteni őket Bash 36

  • 21.02.16 02:31 •
  • lamerman •
  • • # 277679
  • • Habrahabr
  • 34 •
  • 26400

- mint a Forbes, csak jobb.

Ebben a kis cikket fogunk összpontosítani, hogy vajon lehetséges, hogy könnyen használható Python script helyett Bash / Sh. Az első kérdés, ami felmerül az olvasóban, talán, hogy miért nem a ténylegesen használja a Bash / Sh, amelyeket kifejezetten erre a célra létrehozott? Ők hozták létre a hosszú idő, és véleményem szerint meglehetősen sajátos szintaxis nem nagyon hasonlít a többi nyelv, ami elég nehéz megjegyezni, ha nem rendszergazda 50+ leveled. Ne feledd, ha írsz, gondolkodás nélkül, könnyen, ha?


Elemi igazság? Intuitív szintaxis. )

Mindazonáltal, python, ezek a tervek sokkal könnyebb. Minden alkalommal, amikor írok valamit Bache, akkor biztosan mászni a kereső emlékezni, hogyan kell írni egy egyszerű, ha kapcsoló, vagy valami más. Hozzárendelése emlékeztem. ) A Python minden más. Bár én nem írok rá egész nap, de soha nem kellett mászni, és nézd meg, hogy egy egyszerű ciklus, mert a szintaxis a nyelv egyszerű és intuitív. Plusz, ez sokkal közelebb áll a többi többségi nyelvek, mint a Java, C ++, mint Bash / Sh.

Szintén standard és más Python könyvtárak sokkal kényelmesebb, mint a parancssori segédprogramok könyvtárban. Mondjuk, ha szeretnénk elemezni JSON, XML, YAML. Tudod, hogy én nemrég láttam Bache kódot kell ezt csinálni? korrigálni:


És ez nem az én kódot. Ez egy kód Bache / Pitono semleges személy.

Ugyanez a helyzet a regexp, sed tagadhatatlanul praktikus eszköz, de hány ember emlékszik, hogyan kell használni? Nos, kivéve Lee E. McMahon, aki létrehozta. Igen, elvileg sokan emlékeznek, még emlékszem, hogyan kell csinálni az egyszerű dolgokat. De véleményem szerint, a Python újra modul sokkal könnyebb.

Ebben a kis cikkben szeretném bemutatni Önnek a nyelvjárás Python nevű shellpy és annak biztosítására szolgál, hogy amennyire csak lehetséges, hogy cserélje ki a Bash python script.


Shell python nem különbözik egy egyszerű Python kivéve egy részlet. A kifejezések belsejében a sír betűt ( „) a különbséget a Python nem eval, és jelöli az utasítás egy gránát. például


végre ls -l, mint egy shell parancsot. Lehetőség van arra is, hogy írjon mindezt anélkül, hogy `végén sor


és ez lesz a helyes szintaxist.

Akkor végre több parancsokat külön sorokban


és parancsok többsoros


Teljesítményt minden egyes kifejezést shellpy visszaadja egy objektum osztály Eredmény


Ez lehet akár egy Eredmény InteractiveResult (Hivatkozások githab dokumentációt, majd láthatjuk :)). Kezdjük egy egyszerű eredményt. Belőle könnyen kap egy visszatérési kódot végrehajtott parancs


És a szöveg a stdout és stderr


Azt is futtatni az összes vonalon stdout kiadott parancs a ciklusban

Az eredmény is van még egy csomó szintaktikai cukor. Például könnyen ellenőrizni tudjuk, hogy a visszatérési kódot végrehajtott parancs nulla


Vagy egy egyszerűbb módja, hogy a szöveget a stdout


Az összes fenti - ez egy rövid áttekintést a szintaxis, csak azért, hogy egy alap ötlet, és nem szállít mindenkinek, az összes részletet. Van még egy csomó dolgot, és a kölcsönhatás a parancsok végrehajtására, hogy ellenőrizzék a parancsok végrehajtása. De ez minden részletet, amibe akkor mártsuk a dokumentációban (angol nyelven), ha maga az ötlet érdekesnek tűnik az Ön számára.

Hát ez nem egy érvényes Python szintaxis kiderül, hogyan működik minden, akkor?


Mágikus persze, hogy mást :) Igen, barátaim, én kellett használni előfeldolgozás, bevallom, de a másik irányba, én nem találtam. Láttam más könyvtárak, amelyek ilyesmit törés nélkül szintaxis hasonló

Tisztában a az olvasó meg fogja kérdezni, hogy mi IPython, hogy nem fogadja el, Well szinte azonnal, amint az szükséges, hogy a másik ikon akkor csak a kerékpárosok, akik túl lusták, hogy vizsgálja meg a kereső? És ez valóban így néz ki:


Próbáltam használni, de találkozott egy pár komoly probléma, amely nem tudott kijönni. A legfontosabb ezek közül az, hogy nincs egyszerű import Python. Azaz, nem lehet írni a kódot a ipython és könnyen felhasználhatja azt más helyeken. Nem lehet írni az ő ipython modul


és egyszerre szerzett egy tündérmese. Az egyetlen módja annak, hogy újra használni a szkript azt végrehajtani. Elvégzése után egy olyan környezetben, akkor jön az összes funkciót és deklarált változók a futtatható. Nem kóser, véleményem szerint.

A shellpy kód pereispolzuetsya könnyedén importált ugyanúgy, mint a normál python. Tegyük fel, hogy van egy közös modul, amelyben tartunk egy nagyon hasznos kódot. Nézd meg a könyvtár e modul


Tehát mi van itt, nos, az első init. de a terjeszkedés .spy. Ez fémjelzi a kém modult a szokásosnál. Nézd belül is common.spy fájlt, hogy van egy érdekes


Látjuk, hogy van bejelentett függvény, amely belsőleg használ shellpy szintaxist, hogy visszatérjen az eredmény a `echo 5. Mivel a modul használható a kód? Itt van, hogyan


Látod? Mivel a szokásos Python, csak volt és sikeresen importált.

Hogyan működnek a dolgok. Úgy működik, segítségével PEP 0302 - Új Import akasztó. Ha importál valamit a kódot, hogy kezdetben Python kéri a horog, nincs ott valami a tiéd, horog PYTHONPATH megkeresi a fájlok * .spy vagy shellpython modulokat. Ha nincs semmi, akkor, és azt mondta: „Semmi nincs jelen, importálja magad”. Ha úgy találja, ott valami, akkor a horog részt vesz import a saját. Nevezetesen, ez teszi a fájl előfeldolgozó normális python és hozza minden ilyesmi a temp könyvtár az operációs rendszer. Az írás egy új Python modul vagy nyújtsák be azt hozzáadja a PYTHONPATH és az oka is hozott már a legtöbb hétköznapi import.

Nézzük inkább meg néhány példát


Shellpython lehet állítani két módja van: pip telepíteni shellpy vagy klónozására adattár és a végrehajtó setup.py telepíteni. Ezt követően lesz shellpy segédprogramot.

Fuss, mint bármi


A telepítés után, meg lehet próbálni a shellpython példa, hogy közvetlenül a tárolóban.


Van is egy allinone példákat, amelyek így nevezték, mert minden vizsgálat-mind a funkciók, amelyek a shellpy. Nézze csak, hogy megtudja, hogy jobb, mint több van ez, vagy csak futni


A harmadik Python parancs így néz ki

kompatibilitás


Linux alatt fut, és működnek a Mac Python 2.x és a 3.x A windose ez nem működik, de nincs probléma ott dolgozni, mint minden írásos segítségével cross-platform könyvtárak és személyes platformospetsifichnogo rend. Csak nem jutottam még tesztelni a szoftvert windose. Mák nekem sem, de mint más művek :) Ha van egy pipacs, és akkor minden rendben van, kérjük írja meg nekünk.

Dokumentáció (angol nyelven)

A Can I zakontribyutit

Ez engem a prodakshene nem fog törni?


Most verzió 0.4.0, nem stabil és a gyártási folyamatok közben, hogy jobb nem lekötni a forgatókönyvet, megvárta, amíg az összes debug. De a fejlesztés, CI lehet használni teljesen. Mindez vonatkozik a vizsgálatok és munkák :)


E-mail visszajelzést az ötlet általános és végrehajtásáról, különösen, valamint a problémák, vágyak, minden örömmel hallom :) Shift be problémák még githabe, ahol van egy csomó :)

Éltem sokáig, hogy a bash és csak a múlt évben úgy döntött, hogy ismét kísérletezni hipermodern környezetben. zsh úgy döntött, hogy kihagyja, és elkezdte xonsh, mert úgy tűnt, hogy ez hasznos lehet. Általában én nem vele együtt, mert a furcsaságok (automatikus kiegészítést fájt minden alkalommal, hogy megértsék, mit írok), és a hiányzó alapvető dolgok, mint elég és || A bash. Nos, támogatja virtualenv görbe (és ez shell'e Python rajongók számára, hogy írjon projektek Python). De a hal - valóban egy nagyon kellemes dolog, majd megállt (még egy kis screencast jegyezni).

Csak egy héttel ezelőtt, tettem hozzá xonsh menedzser környezetben :-) Van valami javítani, de általában, a probléma megoldódik.

A projekt, a nő, nem vitatkozni.

néhány vitás pontok képest, normál hal történet, és standartnory könyvtár is, minden a szabályok egy évig használható, nagyon elégedett, különösen gitom doboz és csatlakozóval virtualenv. Felvilágosít ezeket a pontokat?

Nem mindig olyan szörnyen bash, akkor a szokásos összehasonlító operátorok helyett -ne és mások.
Most szerette használni a python argparse, a konzol parancsokat. És ez már okozhat bash script például.

Szeretem azt. IMHO, az első dolog, hogy fontolja meg az irányt felismerés / reyuza readline egy ilyen héj. Ismét IMHO - ha a fő yuzekeys scriptek, a lehetőséget, hogy repülni sokkal kevesebb nélkül olyan kényelmi interaktív módban egy bizonyos értelemben.

szeretnénk elemezni JSON, XML, YAML Van JQ / xmlstarlet / shyaml. akkor biztosan mászni a kereső helyett nézd meg a kézikönyvet, amely már a lemezen fekszik. Általában. nyelv egyszerű és intuitív nyakuk van, hogy túl egyszerű és intuitív szintaxis doperet hogy a „kulcsszó” - ez valójában a nevét a csapatok, illetve ezek mindig az elején, és nem több, mint egy csapat. Úgy pyhtona ezután összehasonlítják a „többségi nyelvek” szintaxis nem kevésbé furcsa. És kötelező szintaxis formázni sok félelmet kelt. Előfordul, hogy egy szép egysoros, hogy írjon, mint egy hosszú, keskeny „létra”.

Van JQ / xmlstarlet / shyaml
Ez nem az, hogy van valami alapvetően, de a használhatóság.

Ahelyett, nézd meg a kézikönyvet, amely már a lemezen fekszik. Általában.
Miért megy el a kézikönyvet nézd meg a szintaxist az üzemeltető (ne keverd össze a „minek bejutni a kézi” Én nem mondtam, hogy :))? Finder azonnal reagálnak és kézi először meg kell találni, és akkor megtudja, hogy.

de a könnyű használat és milyen jól vpihivanie egysoros script más nyelven tervezett kényelmes CLI közművek kompakt szintaxis lekérdezéseket? Finder válaszolni fog azonnal Ha a kapcsolat gyors. Még így is, meg kell lapozhat pár oldalakon. utasítás először meg kell találni egy közvetlen módja nehéz írja be a man bash, igen. akkor megtalálja, ha. De ez a probléma van, igen, dyuzhet nagy kézi és ütközések a keresés sok, még a / ^ \ s + ha sok esik. Másrészt, ha lapozunk az egészet egyszerre, lehetséges, hogy emlékezzen, hogy a csapat a végén.

awk - általában egy külön nyelv rengeteg funkcióval. Összességében ez elég nagy írási szkripteket. Nos, a sed - nem hiányzik, amellett, hogy a pop s / foo / bar / van még egy csomó hasznos funkciók, a legegyszerűbb - nyomtasson egy bizonyos tartományban tételek (sed -n 17,19p). És még elméletileg lehetséges megvalósítani minden normális Markov algoritmust, de ez a kategória perverzió.