Maacht Python a Bash Frëndschaft: Smart-Env a Python-Shell Bibliothéiken

Gudden Dag jiddereen.

Haut ass Python eng vun de meescht benotzte Sproochen am Beräich fir net nëmme Softwareprodukter selwer ze kreéieren, awer och hir Infrastruktur ze liwweren. Als Resultat hu vill Devops, egal ob duerch hire Wëllen oder dogéint, eng nei Sprooch ze léieren fir spéider als Ergänzung zu de gudden alen Bash-Skripten ze benotzen. Wéi och ëmmer, Bash a Python bekennen ënnerschiddlech Approche fir Code ze schreiwen an hu verschidde Features, dat heescht datt d'Porting vu Bash Scripten an d'"Schlaangsprooch" heiansdo eng capacious a wäit vun trivial Aufgab ass.

Fir d'Liewe méi einfach fir Devops ze maachen, sinn vill nëtzlech Bibliothéiken an Utilities am Python erstallt a weider erstallt ginn. Dësen Artikel beschreift zwou nei Bibliothéike erstallt vum Auteur vun dësem Post - smart-env и python-Schuel - an entworf fir Devops vun der Bedierfnes ze entlaaschten fir vill Opmierksamkeet op d'Intricacies ze bezuelen fir mam Python ze schaffen, Plaz fir méi interessant Aufgaben ze loossen. Den Ëmfang vun der Aktivitéit vu Bibliothéiken ass Ëmfeldvariablen an d'Start vun externen Utilities.

Jiddereen interesséiert, weg gesinn Kaz.

Nei "Vëloen"?

Et géif schéngen, firwat nei Pakete fir zimlech normal Operatiounen erstellen? Wat verhënnert datt Dir os.environ and subprocess.<Methode oder Klass vun Ärer Wiel> direkt benotzt?

Ech wäert Beweiser zugonschte vun all vun de Bibliothéiken getrennt ginn.

Smart-env Bibliothéik

Ier Dir Äert eegent Geescht schreiwt, ass et nëtzlech online ze goen a no fäerdege Léisungen ze sichen. Natierlech besteet e Risiko net ze fannen wat Dir braucht, awer et ass éischter en "Versécherungsevenement". Als Regel, funktionnéiert dës Approche a spuert vill Zäit an Effort.

Laut de Resultater sichen folgend gouf opgedeckt:

  • et gi Pakete déi tatsächlech Uriff op os.environ wéckelen, awer gläichzäiteg eng Rëtsch oflenken Aktiounen erfuerderen (eng Instanz vun enger Klass erstellen, speziell Parameteren an Uriff, etc.);
  • Et gi gutt Packagen, déi awer strikt un engem spezifeschen Ökosystem gebonne sinn (haaptsächlech Webframeworks wéi Django) an dofir guer net universell ouni Datei sinn;
  • et gi seelen Versich eppes Neies ze maachen. Zum Beispill, addéieren Tippen an explizit verännerlech Wäerter parséieren andeems Dir Methoden rufft wéi
    get_<typename>(var_name)

    Oder hei eng méi Léisung, deen awer net den elo schueden Python 2 ënnerstëtzt (deen, trotz offiziell RIP, et sinn nach ëmmer Bierger vu geschriwwe Code a ganz Ökosystemer);

  • et gi Schoul-Studentenhandwierker, déi aus onbekannte Grënn am Upstream PyPI opgetruede sinn an nëmme Problemer mat der Benennung vun neie Packagen erstellen (besonnesch den Numm "Smart-env" ass eng noutwendeg Moossnam).

An dës Lëscht ka laang weidergoen. Wéi och ëmmer, déi uewe genannte Punkte ware genuch fir mech iwwer d'Iddi ze begeeschteren eppes bequem an universell ze maachen.

Ufuerderunge, déi virum Schreiwen vun Smart-env gesat goufen:

  • Déi einfachst Benotzungsschema
  • Einfach konfiguréierbar Datetyp Ënnerstëtzung
  • Python 2.7 kompatibel
  • Gutt Code Ofdeckung duerch Tester

Schlussendlech gouf dëst alles realiséiert. Hei ass e Beispill vu Gebrauch:

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

Wéi Dir aus dem Beispill kënnt gesinn, fir mat enger neier Klass ze schaffen, musst Dir se just importéieren (Dir braucht keng Instanz ze kreéieren - minus déi extra Aktioun). Zougang zu all Ëmfeldvariabel gëtt erreecht andeems se als Variabel vun der ENV Klass bezeechent gëtt, wat dës Klass tatsächlech en intuitive Wrapper fir dat gebierteg Systemëmfeld mécht, a gläichzäiteg an e méigleche Konfiguratiounsobjekt fir bal all System ëmgewandelt gëtt ( eng ähnlech Approche, zum Beispill, gëtt am Django erreecht, nëmmen do ass de Konfiguratiounsobjekt den Astellungsmodul / Package selwer).

D'Aktivéieren / auszeschalten vum automateschen Tippunterstëtzungsmodus gëtt mat zwou Methoden erreecht - enable_automatic_type_cast () an disable_automatic_type_cast (). Dëst kann praktesch sinn wann d'Ëmfeldsvariabel e serialiséierte JSON-ähnlechen Objet enthält oder souguer just eng boolesch Konstant (explizit d'DEBUG Variabel an Django setzen andeems d'Ëmfeldvariabel mat "gülteg" Saiten vergläicht ass ee vun den heefegste Fäll). Awer elo ass et net néideg d'Strings explizit ze konvertéieren - déi meescht vun den néidegen Aktiounen si schonn an d'Tiefe vun der Bibliothéik agebonnen a waarden just op e Signal fir ze handelen. 🙂 Am Allgemengen, Schreifweis Wierker transparent an ënnerstëtzt bal all sinn gebaut-an Daten Zorte (frozenset, komplex an Bytes goufen net getest).

D'Ufuerderung fir Python 2 z'ënnerstëtzen gouf mat praktesch keng Affer ëmgesat (d'Verloossung vum Tippen an e puer vun den "Zocker Bonbons" vun de leschten Versioune vu Python 3), besonnesch dank der ubiquitärer sechs (fir d'Problemer vun der Benotzung vun Metaklassen ze léisen) .

Awer et ginn e puer Restriktiounen:

  • Python 3 Ënnerstëtzung heescht Versioun 3.5 a méi héich (hir Präsenz an Ärem Projet ass d'Resultat vun entweder Laziness oder Mangel u Bedierfnes fir Verbesserungen, well et schwéier ass mat engem objektive Grond ze kommen firwat Dir nach ëmmer op 3.4 sidd);
  • Am Python 2.7 ënnerstëtzt d'Bibliothéik keng Deserialiséierung vu Set-Literalen. Beschreiwung hei. Mee wann iergendeen et wëll ëmsetzen, sidd Dir wëllkomm :);

D'Bibliothéik huet och en Ausnammechanismus am Fall vun Parsingfehler. Wann de String net vun engem vun den verfügbaren Analysatoren unerkannt ka ginn, bleift de Wäert e String (méi, aus Komfort a Réckkompatibilitéit mat der üblecher Logik wéi Variablen am Bash funktionnéieren).

python-shell Bibliothéik

Elo soen ech Iech iwwer déi zweet Bibliothéik (Ech wäert d'Beschreiwung vun de Mängel vun den existéierende Analoga ausgoen - et ass ähnlech wéi déi beschriwwen fir Smart-Env. Analogen - hei и hei).

Allgemeng sinn d'Iddi vun der Ëmsetzung an d'Ufuerderunge dofir ähnlech wéi déi beschriwwen fir Smart-env, wéi aus dem Beispill gesi ka ginn:

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

D'Iddi ass dës:

  1. Eng eenzeg Klass déi Bash an der Python Welt duerstellt;
  2. All Bash Kommando gëtt als Funktioun vun der Shell Klass genannt;
  3. D'Parameteren fir all Funktiounsopruff ginn dann an den entspriechende Bash Kommandoruff iwwerginn;
  4. All Kommando gëtt "hei an elo" ausgeführt am Moment wou et genannt gëtt, d.h. déi synchron Approche funktionnéiert;
  5. et ass méiglech den Output vun engem Kommando am stdout ze kréien, souwéi säi Retourcode;
  6. Wann de Kommando net am System ass, gëtt eng Ausnam geworf.

Wéi mat Smart-env gëtt et Ënnerstëtzung fir Python 2 (obwuel e bësse méi Afferblutt néideg war) a keng Ënnerstëtzung fir Python 3.0-3.4.

Bibliothéik Entwécklung Pläng

Dir kënnt d'Bibliothéike elo benotzen: béid ginn op der offizieller PyPI gepost. Quelle sinn op Github verfügbar (kuckt hei ënnen).

Béid Bibliothéike ginn entwéckelt andeems de Feedback vun deenen interesséierte gesammelt gëtt. A wann et schwiereg ass mat enger Vielfalt vun neie Featuren am Smart-env ze kommen, da gëtt et an der Python-Shell definitiv eppes anescht ze addéieren:

  • Ënnerstëtzung fir net-blockéierend Uriff;
  • Méiglechkeet vun interaktiv Kommunikatioun mat der Equipe (schaffen mat stdin);
  • nei Eegeschafte bäizefügen (zum Beispill Immobilie fir Ausgang vu stderr ze kréien);
  • Ëmsetzung vun engem Verzeechnes vun verfügbare Kommandoen (fir mat der Dir () Funktioun ze benotzen);
  • an esou weider.

Referenze

  1. Smart-Env Bibliothéik: Github и PyPI
  2. Python-Shell Bibliothéik: Github и PyPI
  3. Telegram Kanal Bibliothéik Aktualiséierungen

UPD 23.02.2020/XNUMX/XNUMX:
* Repositories goufen geplënnert, entspriechend Linken goufen aktualiséiert
* Version python-shell==1.0.1 gëtt virbereet fir d'Verëffentlechung den 29.02.2020/XNUMX/XNUMX. Ännerungen enthalen Ënnerstëtzung fir Kommando Autocomplete an de Kommando dir (Shell), Lafen Kommandoen mat engem ongülteg Python Identifizéierer, a Bugfixes.

Source: will.com

Setzt e Commentaire