Ukwenza ubungane bePython ne-Bash: imitapo yolwazi ehlakaniphile-env kanye ne-python-shell

Usuku oluhle nonke.

Namuhla, i-Python ingenye yezilimi ezisetshenziswa kakhulu emkhakheni wokudala hhayi kuphela imikhiqizo yesofthiwe ngokwayo, kodwa nokuhlinzeka ngengqalasizinda yabo. Ngenxa yalokho, ama-devop amaningi, ngokuthanda kwawo noma ngokumelene nawo, kwadingeka afunde ulimi olusha ukuze asetshenziswe ngokulandelayo njengesithasiselo emibhalweni emihle ye-Bash endala. Kodwa-ke, u-Bash no-Python bathi izindlela ezihlukene zokubhala ikhodi futhi banezici ezithile, okusho ukuthi ukuthuthwa kwemibhalo ye-Bash "kulimi lwenyoka" ngezinye izikhathi kuphenduka kube umsebenzi onamandla futhi kude nomsebenzi omncane.

Ukwenza impilo ibe lula kuma-devops, imitapo yolwazi eminingi ewusizo nezinsiza ePython zidaliwe futhi ziyaqhubeka nokudalwa. Lesi sihloko sichaza imitapo yolwazi emibili emisha edalwe umbhali walokhu okuthunyelwe - smart-env ΠΈ igobolondo le-python - futhi yakhelwe ukukhulula ama-devops esidingweni sokunaka kakhulu ubunkimbinkimbi bokusebenza nePython, okushiya indawo yemisebenzi ethokozisayo eyengeziwe. Ububanzi bomsebenzi wemitapo yolwazi ukuguquguquka kwendawo kanye nokuqalisa izinsiza zangaphandle.

Noma ubani onentshisekelo, sicela abone ikati.

"Amabhayisikili" amasha?

Kubukeka sengathi, kungani udala amaphakheji amasha okusebenza okujwayelekile? Yini ekuvimbela ukuthi usebenzise i-os.environ ne-subprocess.<indlela noma isigaba ozikhethele sona> ngokuqondile?

Ngizonikeza ubufakazi obuvuna umtapo wolwazi ngamunye ngokwehlukana.

umtapo wezincwadi we-smart-env

Ngaphambi kokubhala eyakho ingqondo, kuyasiza ukuya ku-inthanethi futhi ubheke izixazululo esezilungile. Yiqiniso, kunengozi yokungatholi okudingayo, kodwa lokhu kunalokho "umcimbi womshwalense". Njengomthetho, le ndlela isebenza futhi igcina isikhathi esiningi nomzamo.

Ngokwemiphumela sesha okulandelayo kwembulwa:

  • kukhona amaphakheji empeleni ahlanganisa izingcingo ku-os.environ, kodwa ngesikhathi esifanayo adinga inqwaba yezenzo eziphazamisayo (ukudala isibonelo sekilasi, imingcele ekhethekile kumakholi, njll.);
  • Kukhona amaphakheji amahle, okuthi, nokho, ahlanganiswe ngokuqinile ne-ecosystem ethile (ikakhulukazi izinhlaka zewebhu ezifana ne-Django) ngakho-ke awekho nhlobo emhlabeni wonke ngaphandle kwefayela;
  • kunemizamo engavamile yokwenza into entsha. Ngokwesibonelo, engeza ukuthayipha futhi uhlukanise ngokucacile amanani aguquguqukayo ngokubiza izindlela ezifana
    get_<typename>(var_name)

    Noma lapha esinye isisombululo, okuyinto, nokho, engasekeli iPython 2 manje ehlazekile (okuyinto, naphezu kwayo I-RIP esemthethweni, kusenezintaba zekhodi ebhaliwe kanye nemvelo yonke);

  • kukhona imisebenzi yezandla yabafundi besikole okuthi, ngesizathu esithile esingaziwa, yaphelela ku-PyPI ekhuphuka nomfula futhi yakha izinkinga ngokuqanjwa kwamaphakheji amasha (ikakhulukazi, igama elithi "smart-env" liyisilinganiso esidingekayo).

Futhi lolu hlu lungaqhubeka isikhathi eside. Kodwa-ke, amaphuzu angenhla akwanele ukungenza ngijabule ngombono wokwenza okuthile kube lula futhi kube indawo yonke.

Izidingo ezasethwa ngaphambi kokubhala i-smart-env:

  • Uhlelo lokusebenza olulula kakhulu
  • Usekelo lokuthayipha kwedatha olulungiseka kalula
  • I-Python 2.7 iyahambisana
  • Ukufakwa kwekhodi okuhle ngokuhlolwa

Ekugcineni, konke lokhu kwafezeka. Nasi isibonelo sokusetshenziswa:

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

Njengoba ubona esibonelweni, ukuze usebenze nekilasi elisha, udinga nje ukulingenisa (awudingi ukudala isenzakalo - susa isenzo esengeziwe). Ukufinyelela kunoma yikuphi okuguquguqukayo kwemvelo kufinyelelwa ngokubhekisela kukho njengokuguquguqukayo kwesigaba se-ENV, okwenza lesi sigaba sibe i-wrapper enembile yemvelo yohlelo lwendabuko, kuyilapho ngesikhathi esifanayo siguqulela into engase ibe yinto yokucushwa cishe kunoma iyiphi isistimu ( indlela efanayo, isibonelo, ifinyelelwa ku-Django, kuphela lapho into yokumisa iyimojula yezilungiselelo/iphakheji ngokwalo).

Ukunika amandla/ukukhubaza imodi yokusekela yokuthayipha okuzenzakalelayo kufinyelelwa kusetshenziswa izindlela ezimbili - enable_automatic_type_cast() and disable_automatic_type_cast(). Lokhu kungaba lula uma imvelo eguquguqukayo iqukethe into efana ne-JSON eyenziwe nge-serialized noma i-Boolean engaguquki (ukusetha ngokusobala ukuhluka kwe-DEBUG ku-Django ngokuqhathanisa okuguquguqukayo kwendawo kanye neyunithi yezinhlamvu β€œevumelekile” kungesinye sezimo ezivame kakhulu). Kodwa manje asikho isidingo sokuguqula ngokucacile izintambo - eziningi zezenzo ezidingekayo sezivele zifakwe ekujuleni komtapo wezincwadi futhi zilinde nje ukuthi isignali isebenze. πŸ™‚ Ngokuvamile, ukuthayipha kusebenza ngokusobala futhi kusekela cishe zonke izinhlobo zedatha eyakhelwe ngaphakathi etholakalayo (i-frozenset, i-complex and bytes ayizange ihlolwe).

Isidingo sokusekela i-Python 2 sasetshenziswa ngaphandle kokuzidela (ukuyeka ukuthayipha kanye namanye "amaswidi kashukela" ezinguqulo zakamuva zePython 3), ikakhulukazi ngenxa yesithupha esitholakala yonke indawo (ukuxazulula izinkinga zokusebenzisa ama-metaclasses).

Kodwa kunemikhawulo ethile:

  • Ukusekelwa kwePython 3 kusho inguqulo 3.5 nangaphezulu (ukuba khona kwabo kuphrojekthi yakho kuwumphumela wokuvilapha noma ukuntula isidingo sokuthuthukiswa, njengoba kunzima ukuqhamuka nesizathu esiqondile sokuthi kungani usaku-3.4);
  • Ku-Python 2.7, umtapo wolwazi awukusekeli ukuchithwa kwamagama amisiwe. Incazelo lapha. Kodwa uma kukhona ofuna ukukusebenzisa, wamukelekile :);

Umtapo wolwazi nawo unendlela ehlukile uma kwenzeka kuba namaphutha okuhlaziya. Uma iyunithi yezinhlamvu ingakwazi ukubonwa yinoma yibaphi abahlaziyi abatholakalayo, inani lihlala liwuchungechunge (okwakho, ngenxa yezizathu zokufaneleka nokuhambisana okusemuva nokuqonda okujwayelekile kokuthi okuguquguqukayo kusebenza kanjani ku-Bash).

umtapo wezincwadi we-python-shell

Manje ngizokutshela ngomtapo wolwazi wesibili (ngizoyiyeka incazelo yokushiyeka kwezifaniso ezikhona - ifana naleyo echazwe ku-smart-env. Analogues - lapha ΠΈ lapha).

Ngokuvamile, umqondo wokusetshenziswa kanye nezidingo zawo ziyafana nalezo ezichazwe ku-smart-env, njengoba kungabonakala esibonelweni:

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

Umbono uthi:

  1. Ikilasi elilodwa elimele uBash emhlabeni wePython;
  2. Umyalo ngamunye we-Bash ubizwa ngokuthi umsebenzi wesigaba sakwaShell;
  3. Amapharamitha wocingo ngalunye lomsebenzi abe esedluliselwa ocingweni lomyalo we-Bash oluhambisanayo;
  4. Umyalo ngamunye wenziwa β€œlapha futhi manje” ngaleso sikhathi obizwa ngaso, i.e. indlela yokuvumelanisa isebenza;
  5. kungenzeka ukufinyelela okukhiphayo komyalo ku-stdout, kanye nekhodi yayo yokubuyisela;
  6. Uma umyalo ungekho ohlelweni, okuhlukile kuyaphonswa.

Njenge-smart-env, kukhona ukusekelwa kwePython 2 (yize igazi elincane lomhlatshelo lalidingeka) futhi akukho ukusekelwa kwePython 3.0-3.4.

Izinhlelo zokuthuthukisa umtapo wolwazi

Ungasebenzisa imitapo yolwazi manje: yomibili ifakwe ku-PyPI esemthethweni. Imithombo iyatholakala ku-Github (bona ngezansi).

Yomibili imitapo yolwazi izothuthukiswa kucatshangelwa impendulo eqoqwe kulabo abanentshisekelo. Futhi, uma kungase kube nzima ukuqhamuka nezici ezintsha ezihlukahlukene ku-smart-env, khona-ke kugobolondo le-python nakanjani kukhona okunye ongakwengeza:

  • ukwesekwa kwezingcingo ezingavimbeli;
  • amathuba okuxhumana okusebenzisana neqembu (ukusebenza ne-stdin);
  • ukwengeza izakhiwo ezintsha (isibonelo, impahla ukuthola okukhiphayo kusuka stderr);
  • ukuqaliswa kwenkomba yemiyalelo etholakalayo (yokusetshenziswa nomsebenzi we-dir());
  • nokunye.

izithenjwa

  1. ilabhulali ye-smart-env: I-Github ΠΈ I-PyPI
  2. umtapo wezincwadi we-python-shell: I-Github ΠΈ I-PyPI
  3. Isiteshi socingo izibuyekezo zelabhulali

I-UPD 23.02.2020:
* Amakhosombe asusiwe, izixhumanisi ezihambisanayo zibuyekeziwe
* Inguqulo ye-python-shell==1.0.1 ilungiselelwa ukukhishwa ngomhla ka-29.02.2020/XNUMX/XNUMX. Izinguquko zihlanganisa ukusekelwa komyalo wokuqedela ngokuzenzakalela kanye nomyalo we-dir(Shell), ukusebenzisa imiyalo ngesihlonzi esingavumelekile sePython, nokulungiswa kweziphazamisi.

Source: www.habr.com

Engeza amazwana