Dèanamh Python agus Càirdeas Bash: leabharlannan smart-env agus python-shell

Latha math a h-uile duine.

An-diugh, is e Python aon de na cànanan as motha a chleachdar ann an cruthachadh chan e a-mhàin toraidhean bathar-bog fhèin, ach cuideachd a bhith a’ toirt seachad am bun-structar aca. Mar thoradh air an sin, bha aig mòran devops, a rèir an toil fhèin no na aghaidh, ri cànan ùr ionnsachadh airson a chleachdadh nas fhaide air adhart mar leudachadh air seann sgriobtaichean Bash math. Ach, tha Bash agus Python ag aideachadh diofar dhòighean-obrach airson còd sgrìobhaidh agus tha feartan sònraichte aca, a’ ciallachadh gum bi a bhith a’ giùlain sgriobtaichean Bash chun “cànan nathair” uaireannan na ghnìomh comasach agus fada bho bhith beag.

Gus beatha a dhèanamh nas fhasa dha devops, chaidh mòran leabharlannan agus goireasan feumail ann am Python a chruthachadh agus tha iad fhathast gan cruthachadh. Tha an artaigil seo a’ toirt cunntas air dà leabharlann ùr a chruthaich ùghdar na dreuchd seo - smart-env и python-slige - agus air a dhealbhadh gus faochadh a thoirt don fheum air mòran aire a thoirt do cho duilich ‘s a tha e a bhith ag obair le Python, a’ fàgail rùm airson gnìomhan nas inntinniche. Is e farsaingeachd gnìomhachd leabharlannan caochladairean àrainneachd agus cur air bhog goireasan taobh a-muigh.

Duine sam bith le ùidh, faic an cat.

"baidhsagalan" ùra?

Bhiodh e coltach, carson a chruthaicheas tu pasganan ùra airson gnìomhachd gu math àbhaisteach? Dè a chuireas casg ort o bhith a’ cleachdadh os.environ agus fo-phròiseas. <modh no clas de do roghainn> gu dìreach?

Bheir mi fianais seachad airson gach leabharlann fa leth.

leabharlann smart-env

Mus sgrìobh thu do bheachd fhèin, tha e feumail a dhol air-loidhne agus coimhead airson fuasglaidhean deiseil. Gu dearbh, tha cunnart ann nach lorg thu na tha a dhìth ort, ach is e “tachartas àrachais” a tha seo. Mar riaghailt, tha an dòigh-obrach seo ag obair agus a 'sàbhaladh mòran ùine agus oidhirp.

A rèir nan toraidhean lorg chaidh na leanas fhoillseachadh:

  • tha pasganan ann a tha dha-rìribh a’ cuairteachadh fiosan gu os.environ, ach aig an aon àm a dh’ fheumas dòrlach de ghnìomhan tarraingeach (a ’cruthachadh eisimpleir de chlas, paramadairean sònraichte ann an gairmean, msaa);
  • Tha pasganan math ann, a tha, ge-tà, ceangailte gu teann ri eag-shiostam sònraichte (sa mhòr-chuid frèaman lìn mar Django) agus mar sin chan eil iad uile-choitcheann às aonais faidhle;
  • is ann ainneamh a tha oidhirpean air rudeigin ùr a dhèanamh. Mar eisimpleir, cuir clò-sgrìobhadh agus gu soilleir parse luachan caochlaideach le bhith a 'gairm dhòighean mar
    get_<typename>(var_name)

    No an seo aon fhuasgladh eile, nach eil, ge-tà, a’ toirt taic don Python 2 a tha a-nis tàmailteach (a tha, a dh’ aindeoin RIP oifigeil a, tha fhathast beanntan de chòd sgrìobhte agus eag-shiostaman slàn);

  • Tha ciùird oileanach-sgoile ann a thàinig gu crìch, airson adhbhar neo-aithnichte, anns an PyPI shuas an abhainn agus nach cruthaich iad ach duilgheadasan le bhith ag ainmeachadh phasganan ùra (gu sònraichte, tha an t-ainm “smart-env” na cheum riatanach).

Agus faodaidh an liosta seo a dhol air adhart airson ùine mhòr. Ach, bha na puingean gu h-àrd gu leòr airson mo bhrosnachadh leis a’ bheachd a bhith a’ dèanamh rudeigin goireasach agus uile-choitcheann.

Riatanasan a chaidh a shuidheachadh mus sgrìobh thu smart-env:

  • An sgeama cleachdaidh as sìmplidh
  • Taic clò-sgrìobhaidh dàta a tha furasta a rèiteachadh
  • Python 2.7 co-chòrdail
  • Deagh chòmhdach còd le deuchainnean

Mu dheireadh, chaidh seo uile a thoirt gu buil. Seo eisimpleir de chleachdadh:

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

Mar a chì thu bhon eisimpleir, gus obrachadh le clas ùr, cha leig thu leas ach a thoirt a-steach (chan fheum thu eisimpleir a chruthachadh - às aonais an gnìomh a bharrachd). Tha ruigsinneachd air caochladair àrainneachd sam bith air a choileanadh le bhith a’ toirt iomradh air mar chaochladair den chlas ENV, a tha, gu dearbh, a’ dèanamh a’ chlas seo na inneal-còmhdaich intuitive airson àrainneachd an t-siostaim dhùthchasach, agus aig an aon àm ga thionndadh gu bhith na nì rèiteachaidh comasach airson cha mhòr siostam sam bith ( tha dòigh-obrach coltach ris, mar eisimpleir, air a choileanadh ann an Django , dìreach an sin is e am modal rèiteachaidh am modal / pasgan roghainnean fhèin).

Bithear a’ comasachadh / a’ cur à comas am modh taic clò-sgrìobhaidh fèin-ghluasadach le bhith a’ cleachdadh dà dhòigh - enable_automatic_type_cast () agus disable_automatic_type_cast(). Faodaidh seo a bhith goireasach ma tha an caochladair àrainneachd a’ toirt a-steach nì sreathach coltach ri JSON no eadhon dìreach seasmhach Boolean (tha suidheachadh gu soilleir an caochladair DEBUG ann an Django le bhith a’ dèanamh coimeas eadar caochladair na h-àrainneachd le sreangan “dligheach” mar aon de na cùisean as cumanta). Ach a-nis chan eil feum air teudan a thionndadh gu soilleir - tha a ’mhòr-chuid de na gnìomhan riatanach mar-thà freumhaichte ann an doimhneachd an leabharlainn agus tha iad dìreach a’ feitheamh ri comharra a dhol an gnìomh. 🙂 San fharsaingeachd, bidh clò-sgrìobhadh ag obair gu follaiseach agus a’ toirt taic do cha mhòr a h-uile seòrsa dàta togte (cha deach reòiteag, iom-fhillte agus bytes a dhearbhadh).

Chaidh an riatanas airson taic a thoirt do Python 2 a chuir an gnìomh le cha mhòr ìobairt sam bith (a’ toirt seachad clò-sgrìobhadh agus cuid de na “candies siùcair" de na dreachan as ùire de Python 3), gu sònraichte le taing dha na sia a bha uile-làthaireach (gus fuasgladh fhaighinn air duilgheadasan cleachdadh metaclasses).

Ach tha cuid de chuingealachaidhean ann:

  • Tha taic Python 3 a’ ciallachadh dreach 3.5 agus nas àirde (tha an làthaireachd sa phròiseact agad mar thoradh air leisg no dìth feum air leasachaidhean, leis gu bheil e duilich adhbhar reusanta a lorg carson a tha thu fhathast air 3.4);
  • Ann am Python 2.7, chan eil an leabharlann a’ toirt taic do dhì-shreathachadh litrichean suidhichte. Tuairisgeul an seo. Ach ma tha duine airson a chur an gnìomh, tha fàilte oirbh :);

Tha uidheamachd eisgeachd aig an leabharlann cuideachd gun fhios nach bi mearachdan parsaidh ann. Mura b’ urrainn dha gin de na sgrùdairean a tha rim faighinn an sreang aithneachadh, tha an luach fhathast na shreang (an àite sin, airson adhbharan goireasachd agus co-chòrdalachd air ais leis an loidsig àbhaisteach air mar a bhios caochladairean ag obair ann am Bash).

leabharlann python-slige

A-nis innsidh mi dhut mun dàrna leabharlann (cuiridh mi às don tuairisgeul air easbhaidhean nan analogues a th ’ann - tha e coltach ris an fhear a chaidh a mhìneachadh airson smart-env. Analogues - an seo и an seo).

San fharsaingeachd, tha am beachd air a chuir an gnìomh agus na riatanasan air a shon coltach ris an fheadhainn a chaidh a mhìneachadh airson smart-env, mar a chithear san eisimpleir:

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

Is e seo am beachd:

  1. Clas singilte a tha a’ riochdachadh Bash ann an saoghal Python;
  2. Tha gach àithne Bash air a ghairm mar ghnìomh den chlas Shell;
  3. Thèid na crìochan airson gach gairm gnìomh an uairsin a chuir a-steach don ghairm àithne Bash co-fhreagarrach;
  4. Tha gach àithne air a chuir gu bàs “an seo agus a-nis” aig an àm ris an canar, i.e. tha an dòigh-obrach sioncronaich ag obair;
  5. tha e comasach faighinn gu toradh àithne ann an stdout, a bharrachd air a chòd tilleadh;
  6. Mura h-eil an àithne san t-siostam, thèid eisgeachd a thilgeil.

Coltach ri smart-env, tha taic ann airson Python 2 (ged a bha feum air beagan a bharrachd fuil ìobairteach) agus gun taic sam bith airson Python 3.0-3.4.

Planaichean leasachaidh leabharlann

Faodaidh tu na leabharlannan a chleachdadh a-nis: tha an dà chuid air an postadh air an PyPI oifigeil. Tha stòran rim faighinn air Github (faic gu h-ìosal).

Thèid an dà leabharlann a leasachadh a’ gabhail a-steach fios air ais bhon fheadhainn le ùidh. Agus, ma dh’ fhaodadh e a bhith duilich grunn fheartan ùra a lorg ann an smart-env, an uairsin ann am python-shell gu cinnteach tha rudeigin eile ri chur ris:

  • taic airson gairmean gun bhacadh;
  • comas conaltradh eadar-ghnìomhach leis an sgioba (ag obair le stdin);
  • cuir feartan ùra ris (mar eisimpleir, seilbh gus toradh fhaighinn bho stderr);
  • cur an gnìomh eòlaire de dh’ àitheantan a tha rim faighinn (airson a chleachdadh leis a’ ghnìomh dir());
  • agus mar sin air adhart.

iomraidhean

  1. leabharlann smart-env: GitHub и PyPI
  2. leabharlann python-shell: GitHub и PyPI
  3. Telegram sianal ùrachaidhean leabharlann

UPD 23.02.2020/XNUMX/XNUMX:
* Chaidh stòran a ghluasad, chaidh ceanglaichean co-fhreagarrach ùrachadh
* Tionndadh python-shell = = 1.0.1 ga ullachadh airson a leigeil ma sgaoil air 29.02.2020/XNUMX/XNUMX. Tha atharrachaidhean a’ toirt a-steach taic airson fèin-choileanadh àithne agus an àithne dir (Shell), ruith òrdughan le aithnichear Python neo-dhligheach, agus rèiteachadh bug.

Source: www.habr.com

Cuir beachd ann