Python eta Bash Friendship egitea: smart-env eta python-shell liburutegiak

Egun on guztioi.

Gaur egun, Python software produktuak sortzeaz gain, beren azpiegiturak eskaintzeko eremuan gehien erabiltzen den hizkuntza bat da. Ondorioz, devop askok, beren borondatez edo horren aurka, hizkuntza berri bat ikasi behar izan zuten gero Bash gidoi zahar onen osagarri gisa erabiltzeko. Hala ere, Bash-ek eta Python-ek kodea idazteko ikuspegi desberdinak aitortzen dituzte eta ezaugarri batzuk dituzte, hau da, Bash-en gidoiak "suge-hizkuntzara" eramatea batzuetan zeregin zabala eta hutsaletik urrun bihurtzen da.

Devopei bizitza errazteko, Python-en liburutegi eta utilitate erabilgarria asko sortu dira eta sortzen jarraitzen dute. Artikulu honek mezu honen egileak sortutako bi liburutegi berri deskribatzen ditu - smart-env ΠΈ python-shell - eta devopei Python-ekin lan egiteko zailtasunei arreta handia emateko beharra arintzeko diseinatua, zeregin interesgarriagoei lekua utziz. Liburutegien jarduera-esparrua ingurune-aldagaiak eta kanpoko utilitateak abiarazteko dira.

Interesa duenak, ikusi cat.

"Bizikleta" berriak?

Badirudi, zergatik sortu pakete berriak nahiko eragiketa arruntetarako? Zerk eragozten dizu os.environ eta subprocess.<metodoa edo klasea> zuzenean erabiltzea?

Liburutegi bakoitzaren aldeko frogak banan-banan emango ditut.

smart-env liburutegia

Zure ideia idatzi aurretik, komeni da sarean sartu eta prest dauden irtenbideak bilatzea. Noski, behar duzuna ez aurkitzeko arriskua dago, baina hau β€œaseguru-gertaera” bat da. Oro har, ikuspegi honek funtzionatzen du eta denbora eta esfortzu asko aurrezten du.

Emaitzen arabera bilaketa honako hau agerian geratu zen:

  • os.environ-rako deiak biltzen dituzten paketeak daude, baina aldi berean ekintza distraigarri mordoa eskatzen dutenak (klase baten instantzia bat sortzea, deietan parametro bereziak, etab.);
  • Badaude pakete onak, baina ekosistema zehatz bati hertsiki lotuta daudenak (batez ere Django bezalako web esparruak) eta, beraz, ez dira batere unibertsalak fitxategirik gabe;
  • saiakera arraroa dago zerbait berria egiteko. Adibidez, gehitu idazketa eta esplizituki analizatu aldagaien balioak bezalako metodoei deituz
    get_<typename>(var_name)

    Edo hemen irtenbide bat gehiago, eta horrek, ordea, ez du onartzen orain lotsagarria den Python 2 (hau da, nahiz eta RIP ofiziala, oraindik kode idatzizko mendiak eta ekosistema osoak daude);

  • Badaude eskola-ikasleen eskulanak, arrazoi ezezagun bategatik, upstream PyPI-n amaitu eta pakete berrien izendapenean soilik arazoak sortzen dituztenak (bereziki, "smart-env" izena beharrezko neurria da).

Eta zerrenda honek denbora luzez iraun dezake. Hala ere, goiko puntuak nahikoak izan ziren zerbait eroso eta unibertsala egiteko ideiarekin hunkitzeko.

smart-env idatzi aurretik ezarri ziren eskakizunak:

  • Erabilera eskema errazena
  • Erraz konfigura daitekeen datuak idazteko laguntza
  • Python 2.7 bateragarria
  • Kode estaldura ona proben bidez

Azken finean, hori guztia gauzatu zen. Hona hemen erabilera adibide bat:

from smart_env import ENV

print(ENV.HOME)  # Equals print(os.environ['HOME'])

# assuming you set env variable MYVAR to "True"

ENV.enable_automatic_type_cast()

my_var = ENV.MY_VAR  # Equals boolean True

ENV.NEW_VAR = 100  # Sets a new environment variable

Adibidean ikus dezakezun bezala, klase berri batekin lan egiteko, inportatu besterik ez duzu behar (ez duzu instantziarik sortu behar - ekintza gehigarria kenduta). Edozein ingurune-aldagairako sarbidea ENV klaseko aldagai gisa aipatuz lortzen da, eta horrek, hain zuzen ere, klase hau sistema natiboko ingurunerako bilgarri intuitibo bihurtzen du, eta, aldi berean, ia edozein sistemarentzat konfigurazio-objektu posible bihurtzen du ( antzeko ikuspegia, adibidez, Django-n lortzen da, hor bakarrik konfigurazio objektua ezarpenen modulua/paketea bera da).

Idazketa automatikoaren laguntza modua gaitzea/desgaitzea bi metodo erabiliz lortzen da: enable_automatic_type_cast() eta disable_automatic_type_cast(). Hau komenigarria izan daiteke ingurune-aldagaiak serializatutako JSON moduko objektu bat edo konstante boolearra besterik ez badu (esplizituki DEBUG aldagaia Django-n ezartzea ingurune-aldagaia "baliozko" kateekin alderatuz kasurik ohikoenetako bat da). Baina orain ez dago kateak esplizituki bihurtzeko beharrik - beharrezko ekintza gehienak liburutegiaren sakonean sartuta daude jada eta seinale baten zain daude. πŸ™‚ Oro har, idazketak garden funtzionatzen du eta erabilgarri dauden ia datu integratuak onartzen ditu (izoztutako multzoa, konplexua eta byteak ez ziren probatu).

Python 2 onartzeko eskakizuna ia sakrifiziorik gabe inplementatu zen (idazketa eta Python 3-ren azken bertsioetako "azukre-goxoki" batzuk alde batera utzita), bereziki nonahiko seiei esker (metaklaseak erabiltzeko arazoak konpontzeko) .

Baina murrizketa batzuk daude:

  • Python 3-ren laguntzak 3.5 bertsioa eta berriagoa esan nahi du (zure proiektuan duten presentzia alferkeriaren edo hobekuntzaren beharrik ezaren ondorioa da, zaila baita oraindik 3.4-n zauden arrazoi objektibo bat aurkitzea);
  • Python 2.7-n, liburutegiak ez du onartzen multzoko literalen deserializazioa. Deskribapena Hemen. Baina norbaitek ezarri nahi badu, ongi etorria zarete :);

Liburutegiak salbuespen-mekanismo bat ere badu analizatze-akatsen kasuan. Eskuragarri dauden analizatzaileren batek katea ezin badu ezagutu, balioak kate izaten jarraitzen du (baizik eta erosotasun arrazoiengatik eta aldagaiek Bash-en funtzionatzen duten ohiko logikarekin atzerako bateragarritasunagatik).

python-shell liburutegia

Orain bigarren liburutegiari buruz esango dizut (lehendik dauden analogoen gabezien deskribapena alde batera utziko dut - smart-env-erako deskribatutakoaren antzekoa da. Analogikoak - Hemen ΠΈ Hemen).

Oro har, inplementazioaren ideia eta horren eskakizunak smart-env-rako deskribatutakoen antzekoak dira, adibidean ikus daitekeenez:

from python_shell import Shell

Shell.ls('-l', '$HOME')  # Equals "ls -l $HOME"

command = Shell.whoami()  # Equals "whoami"
print(command.output)  # prints your current user name

print(command.command)  # prints "whoami"
print(command.return_code)  # prints "0"
print(command.arguments)  # prints ""

Shell.mkdir('-p', '/tmp/new_folder')  # makes a new folder

Ideia hau da:

  1. Python munduan Bash adierazten duen klase bakarra;
  2. Bash komando bakoitza Shell klasearen funtzio gisa deitzen da;
  3. Funtzio-dei bakoitzaren parametroak dagokion Bash komando-deira pasatzen dira;
  4. Komando bakoitza "hemen eta orain" exekutatzen da deitzen den momentuan, hau da. hurbilketa sinkronoak funtzionatzen du;
  5. stdout-en komando baten irteerara sartzeko aukera dago, baita bere itzulera kodea ere;
  6. Komandoa sisteman ez badago, salbuespen bat botako da.

Smart-env-arekin gertatzen den bezala, Python 2rako laguntza dago (nahiz eta odol sakrifizio gehiago behar zen) eta ez dago Python 3.0-3.4rako laguntzarik.

Liburutegiak garatzeko planak

Liburutegiak erabil ditzakezu orain: biak PyPI ofizialean argitaratuta daude. Iturriak Github-en daude eskuragarri (ikus behean).

Bi liburutegiak interesatuek jasotako iritziak kontuan hartuta garatuko dira. Eta, smart-env-en hainbat ezaugarri berri sortzea zaila izan bada, python-shell-en zalantzarik gabe, beste zerbait gehitzeko dago:

  • blokeorik gabeko deiak egiteko laguntza;
  • taldearekin komunikazio interaktiboa izateko aukera (stdin-ekin lan egitea);
  • propietate berriak gehitzea (adibidez, stderr-en irteera jasotzeko propietatea);
  • Eskuragarri dauden komandoen direktorio baten ezarpena (dir() funtzioarekin erabiltzeko);
  • eta abar.

Erreferentziak

  1. smart-env liburutegia: Github ΠΈ PyPI
  2. python-shell liburutegia: Github ΠΈ PyPI
  3. Telegram kanala liburutegien eguneraketak

23.02.2020/XNUMX/XNUMXko eguneratua:
* Biltegiak mugitu dira, dagozkion estekak eguneratu dira
* Python-shell==1.0.1 bertsioa 29.02.2020/XNUMX/XNUMXrako kaleratzeko prestatzen ari da. Aldaketen artean, komandoen osatze automatikoa eta dir(Shell) komandoa, Python identifikatzaile baliogabea duten komandoak exekutatzen dira eta akatsen konponketak daude.

Iturria: www.habr.com

Gehitu iruzkin berria