Ukwenza ubuhlobo bePython kunye neBash: i-smart-env kunye namathala eencwadi e-python-shell

Usuku oluhle nonke.

Namhlanje, iPython yenye yezona lwimi zisetyenziswa kakhulu kwintsimi yokudala kungekuphela nje iimveliso zesoftware ngokwazo, kodwa nokubonelela ngeziseko zazo. Ngenxa yoko, ii-devops ezininzi, nokuba ngokuthanda kwazo okanye ngokuchasene nazo, kwafuneka zifunde ulwimi olutsha ukuze zisetyenziswe kamva njengezongezelelo kwimibhalo emihle yeBash endala. Nangona kunjalo, uBash kunye nePython baxela iindlela ezahlukeneyo zokubhala ikhowudi kwaye baneempawu ezithile, okuthetha ukuba ukuhambisa izikripthi zeBash "kulwimi lwenyoka" ngamanye amaxesha kujika kube yinto enobuchule kwaye kude nomsebenzi omncinci.

Ukwenza ubomi bube lula kwi-devops, uninzi lwamathala eencwadi aluncedo kunye nezinto eziluncedo kwiPython zenziwe kwaye ziyaqhubeka ukuyilwa. Eli nqaku lichaza amathala eencwadi amabini amatsha adalwe ngumbhali wesi sithuba - smart-env ΠΈ iqokobhe lepython - kwaye yenzelwe ukukhulula i-devops kwisidingo sokuhlawula ingqwalasela eninzi kwiingxaki zokusebenza kunye nePython, ukushiya indawo yemisebenzi enomdla ngakumbi. Umda womsebenzi wamathala eencwadi kukutshintshatshintsha kokusingqongileyo kunye nokusungula izinto eziluncedo zangaphandle.

Nabani na onomdla, nceda ubone ikati.

"iibhayisekile" ezintsha?

Kubonakala ngathi, kutheni udala iipakethe ezintsha zemisebenzi eqhelekileyo? Yintoni ekuthintelayo ekusebenziseni i-os.environ kunye ne-subprocess.<indlela okanye udidi olukhethileyo> ngokuthe ngqo?

Ndiza kunika ubungqina obuxhasa ithala leencwadi ngalinye ngokwahlukeneyo.

smart-env ilayibrari

Ngaphambi kokuba ubhale eyakho ingqondo, kuyanceda ukuya kwi-Intanethi kwaye ujonge izisombululo esele zenziwe. Ngokuqinisekileyo, kukho umngcipheko wokungafumani into oyifunayo, kodwa oku kunokuba "isiganeko se-inshurensi". Njengomthetho, le ndlela isebenza kwaye igcina ixesha elininzi kunye nomgudu.

Ngokweziphumo ukukhangela oku kulandelayo kwatyhilwa:

  • kukho iipakethe ezisonga ngokwenene iifowuni kwi-os.environ, kodwa kwangaxeshanye zifuna iqela lezenzo eziphazamisayo (ukudala umzekelo weklasi, iiparitha ezikhethekileyo kwiifowuni, njl.);
  • Kukho iipakethe ezilungileyo, ezithi, nangona kunjalo, ziboshwe ngokungqongqo kwi-ecosystem ethile (ikakhulukazi izikhokelo zewebhu ezifana ne-Django) kwaye ngoko azikho konke konke ngaphandle kwefayile;
  • kukho iinzame ezinqabileyo zokwenza into entsha. Umzekelo, yongeza ukuchwetheza kwaye ucazulule ngokucacileyo amaxabiso aguquguqukayo ngokubiza iindlela ezinje
    get_<typename>(var_name)

    Okanye apha esinye isisombululo, nangona kunjalo, ayixhasi iPython 2 ehlazekileyo ngoku (leyo, nangona kunjalo I-RIP esemthethweni, kusekho iintaba zekhowudi ebhaliweyo kunye nendalo yonke);

  • Kukho imisebenzi yezandla yabafundi besikolo ethi, ngenxa yezizathu ezingaziwayo, iphelile kwi-PyPI ekhuphukayo kwaye idala iingxaki kuphela ngokubizwa kweepakethe ezintsha (ngokukodwa, igama elithi "smart-env" liyimilinganiselo eyimfuneko).

Kwaye olu luhlu lunokuqhubeka ixesha elide. Nangona kunjalo, la manqaku angentla akwanele ukundenza ndibe nemincili malunga nombono wokwenza into elula kunye neyendalo yonke.

Iimfuno ezimiselweyo phambi kokubhala i-smart-env:

  • Eyona nkqubo ilula yokusetyenziswa
  • Inkxaso yokuchwetheza idatha eqwalaselwe ngokulula
  • IPython 2.7 iyahambelana
  • Ikhowudi yokugubungela kakuhle ngovavanyo

Ekugqibeleni, konke oku kwazaliseka. Nanku umzekelo wokusetyenziswa:

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

Njengoko unokubona kumzekelo, ukusebenza neklasi entsha, kufuneka uyingenise ngaphandle (akuyomfuneko ukuba wenze umzekelo - thabatha isenzo esongezelelweyo). Ukufikelela kuyo nayiphi na imeko-bume eguquguqukayo iphunyezwa ngokubhekisele kuyo njengento eguquguqukayo yodidi lwe-ENV, leyo, eneneni, yenza olu didi lube luqweqwe olucacileyo lwemeko-bume yenkqubo yemveli, lo gama ngaxeshanye uyijika ibe yinto enokwenzeka yoqwalaselo phantse kuyo nayiphi na inkqubo. indlela efanayo, umzekelo, iphunyeziwe kwi Django , kuphela apho into yoqwalaselo imodyuli yezicwangciso/iphakheji ngokwayo).

Ukuvumela / ukukhubaza imo yenkxaso yokuchwetheza ngokuzenzekelayo kuphunyeziwe ngokusebenzisa iindlela ezimbini - enable_automatic_type_cast () kunye ne- disable_automatic_type_cast (). Oku kunokuba lula ukuba uguqulo lwemeko-bume luqulathe uthotho lwento efana ne-JSON okanye iBoolean engaguqukiyo (ukuseta ngokuthe gca i-DEBUG eguquguqukayo kwi-Django ngokuthelekisa ukuguquguquka kokusingqongileyo kunye neentambo "ezisebenzayo" yenye yezona meko zixhaphakileyo). Kodwa ngoku akukho mfuneko yokuguqula ngokucacileyo iintambo - ezininzi zezenzo eziyimfuneko sele zifakwe kwiindawo ezinzulu zethala leencwadi kwaye zilinde nje ukuba umqondiso usebenze. πŸ™‚ Ngokubanzi, ukuchwetheza kusebenza ngokungafihlisiyo kwaye kuxhasa phantse zonke iintlobo zedatha ezakhelwe ngaphakathi (i-frozenset, i-complex and bytes ayizange ivavanywe).

Imfuno yokuxhasa iPython 2 yaphunyezwa ngokungekho mbingelelo (ukulahlwa kokuchwetheza kunye nezinye "zeelekese zeswekile" kwiinguqulelo zamva nje zePython 3), ngokukodwa, ngenxa yesithandathu esikhoyo (ukusombulula iingxaki zokusebenzisa i-metaclasses). ).

Kodwa kukho ezinye izithintelo:

  • Inkxaso yePython 3 ithetha inguqulo 3.5 nangaphezulu (ubukho babo kwiprojekthi yakho bubangelwa bubuvila okanye ukungabikho kwesidingo sokuphucula, kuba kunzima ukuza nesizathu esinenjongo sokuba kutheni usese-3.4);
  • KwiPython 2.7, ithala leencwadi alikuxhasi ukuchithwa kwee-literalis. Inkcazo apha. Kodwa ukuba nabani na ufuna ukuyiphumeza, wamkelekile :);

Ithala leencwadi likwanendlela eyahlukileyo xa kukho iimpazamo zokwahlulahlula. Ukuba umtya awukwazanga ukuqatshelwa yiyiphi na i-analyzer ekhoyo, ixabiso lihlala lingumtya (kunoko, ngenxa yezizathu zokulula kunye nokuhambelana ngasemva kunye nengqiqo eqhelekileyo yeendlela eziguquguqukayo ezisebenza ngayo kwi-Bash).

ilayibrari ye-python-shell

Ngoku ndiza kukuxelela malunga nethala leencwadi lesibini (ndiya kushiya inkcazo yeentsilelo zee-analogue ezikhoyo - zifana naleyo ichazwe kwi-smart-env. I-Analogues - apha ΠΈ apha).

Ngokubanzi, ingcamango yokuphunyezwa kunye neemfuno zayo ziyafana nezo zichazwe kwi-smart-env, njengoko kunokubonwa kumzekelo:

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

Ingcamango yile:

  1. Iklasi enye emele iBash kwihlabathi lePython;
  2. Umyalelo weBash ngamnye ubizwa ngokuba ngumsebenzi wodidi lweShell;
  3. Iiparamitha zefowuni nganye zigqithiselwa kwifowuni yomyalelo weBash ehambelanayo;
  4. Umyalelo ngamnye uphunyezwa "apha kwaye ngoku" ngeli xesha ubizwa ngokuba, i.e. indlela ehambelanayo isebenza;
  5. kuyenzeka ukufikelela kwimveliso yomyalelo kwistdout, kunye nekhowudi yayo yokubuyisela;
  6. Ukuba umyalelo awukho kwisixokelelwano, kuphoswa ngaphandle.

Njengoko kunye ne-smart-env, kukho inkxaso yePython 2 (nangona igazi elincinci lokubingelela lalifuneka) kwaye akukho nkxaso yePython 3.0-3.4.

Izicwangciso zophuhliso lwamathala eencwadi

Unokusebenzisa amathala eencwadi ngoku: zombini zifakwe kwiPyPI esemthethweni. Imithombo iyafumaneka kwiGithub (jonga ngezantsi).

Omabini amathala eencwadi aya kuphuhliswa kuthathelwa ingqalelo ingxelo eqokelelwe kwabo banomdla. Kwaye, ukuba kunokuba nzima ukuza nezinto ezahlukeneyo ezintsha kwi-smart-env, ke kwi-python-shell kukho enye into enokongeza:

  • inkxaso yeefowuni ezingathinteliyo;
  • ukubakho konxibelelwano olusebenzayo kunye neqela (ukusebenza ne-stdin);
  • ukongeza iipropati ezintsha (umzekelo, ipropati ukufumana imveliso evela kwi-stderr);
  • ukuphunyezwa koluhlu lwemiyalelo ekhoyo (yokusetyenziswa nge dir () umsebenzi);
  • njalo njalo.

iimbekiselo

  1. ilayibrari ye-smart-env: Github ΠΈ I-PyPI
  2. ilayibrari ye-python-shell: Github ΠΈ I-PyPI
  3. Itshaneli yeTelegram uhlaziyo lwethala leencwadi

UPD 23.02.2020/XNUMX/XNUMX:
* Iindawo zokugcina zisusiwe, amakhonkco ahambelanayo ahlaziyiwe
* Inguqulelo yepython-shell==1.0.1 ilungiselelwa ukukhululwa nge-29.02.2020/XNUMX/XNUMX. Utshintsho luquka inkxaso yomyalelo wokugqibezela ngokuzenzekelayo kunye nomyalelo we-dir(Shell), uqhuba imiyalelo ngesazisi esingasebenziyo sePython, kunye nokulungiswa kwebug.

umthombo: www.habr.com

Yongeza izimvo