Ime Python na Bash Enyi: smart-env na python-shell ọba akwụkwọ

ụbọchị ọma onye ọ bụla.

Taa, Python bụ otu n'ime asụsụ ndị a na-ejikarị eme ihe n'ọhịa nke ịmepụta ọ bụghị naanị ngwaahịa ngwanrọ n'onwe ya, kamakwa inye akụrụngwa ha. N'ihi ya, ọtụtụ ndị deps, site n'ọchịchọ nke aka ha ma ọ bụ megide ya, ga-amụ asụsụ ọhụrụ maka iji ya eme ihe dị ka mgbakwunye na ezigbo ederede Bash ochie. Otú ọ dị, Bash na Python na-ekwupụta ụzọ dị iche iche iji dee koodu ma nwee ụfọdụ atụmatụ, nke pụtara na ịbufe Bash scripts na "asụsụ agwọ" na-apụta mgbe ụfọdụ ka ọ bụrụ ọrụ siri ike ma dị anya site na obere ọrụ.

Iji mee ka ndụ dịkwuo mfe maka devops, ọtụtụ ụlọ akwụkwọ na ihe ndị bara uru na Python ka emepụtara ma nọgide na-emepụta. Edemede a na-akọwa ọba akwụkwọ ọhụrụ abụọ nke onye dere akwụkwọ a mebere - smart-env и python-shell - na emebere ya iji belata devops site na mkpa ọ dị itinye uche na mgbagwoju anya nke ịrụ ọrụ na Python, na-ahapụ ohere maka ọrụ ndị ọzọ na-adọrọ mmasị. Ogologo ọrụ nke ụlọ akwụkwọ ọbá akwụkwọ bụ mgbanwe gburugburu ebe obibi na ịmalite ihe ndị dị na mpụga.

Onye ọ bụla nwere mmasị, biko hụ pusi.

"igwe igwe" ọhụrụ?

Ọ ga-adị ka, gịnị kpatara ịmepụta ngwugwu ọhụrụ maka arụmọrụ nkịtị? Kedu ihe na-egbochi gị iji os.environ na subprocess.<usoro ma ọ bụ klas nke nhọrọ gị> ozugbo?

M ga-enye ihe akaebe na-akwado ụlọ akwụkwọ ọ bụla iche iche.

ụlọ akwụkwọ smart-env

Tupu ị dee ụbụrụ ụbụrụ nke gị, ọ bara uru ịga na ntanetị wee chọọ ngwọta edoziworo. N'ezie, enwere ihe ize ndụ nke ịchọtaghị ihe ịchọrọ, mana nke a bụ kama "mmemme mkpuchi mkpuchi". Dị ka a na-achị, usoro a na-arụ ọrụ ma na-azọpụta oge na mgbalị dị ukwuu.

Dị ka nsonaazụ ya nyocha ekpughere ihe ndị a:

  • enwere ngwugwu nke kechie oku na os.environ n'ezie, mana n'otu oge ahụ chọrọ ọtụtụ omume na-adọpụ uche (ịmepụta ihe atụ nke klas, paramita pụrụ iche na oku, wdg);
  • Enwere ngwugwu dị mma, nke, Otú ọ dị, na-ejikọta ya na usoro gburugburu ebe obibi (karịsịa web frameworks dị ka Django) ya mere ọ bụghị ihe niile zuru ụwa ọnụ na-enweghị faịlụ;
  • e nwere obere mgbalị ime ihe ọhụrụ. Ọmụmaatụ, tinye pịnye ma kpachapụ anya n'ụzọ doro anya ụkpụrụ agbanwe agbanwe site n'ịkpọ usoro dịka
    get_<typename>(var_name)

    Ma ọ bụ ebe a otu ngwọta ọzọ, nke, Otú ọ dị, anaghị akwado Python 2 ugbu a ihere (nke, n'agbanyeghị RIP gọọmentị, a ka nwere ugwu nke koodu ederede na gburugburu ebe obibi dum);

  • Enwere ọrụ nka nke ụmụ akwụkwọ, n'ihi ihe ụfọdụ a na-amaghị, kwụsịrị na PyPI dị elu ma na-akpata naanị nsogbu na aha ngwugwu ọhụrụ (karịsịa, aha "smart-env" bụ ihe dị mkpa).

Na ndepụta a nwere ike ịga n'ihu ruo ogologo oge. Otú ọ dị, isi ihe ndị dị n'elu zuru ezu iji mee ka m nwee obi ụtọ banyere echiche nke ime ihe dị mma na nke zuru ụwa ọnụ.

Ihe ndị achọrọ tupu ịde smart-env:

  • Atụmatụ ojiji kacha mfe
  • Nkwado ntinye data nwere ike ịhazi ngwa ngwa
  • Python 2.7 dakọtara
  • Ezigbo mkpuchi koodu site na ule

N'ikpeazụ, ihe a niile mezuru. Nke a bụ ọmụmaatụ ojiji:

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

Dị ka ị na-ahụ site na ihe atụ, iji rụọ ọrụ na klas ọhụrụ, naanị ị ga-ebubata ya (ịchọghị ịmepụta ihe atụ - na-ewepụ ihe ndị ọzọ). A na-enweta ohere ịnweta mgbanwe gburugburu ebe obibi ọ bụla site n'ịtụ aka na ya dị ka mgbanwe nke klas ENV, nke, n'ezie, na-eme ka klas a bụrụ ihe mkpuchi na-emetụ n'ahụ maka gburugburu ebe obibi obodo, ebe n'otu oge na-atụgharị ya n'ime ihe nhazi nwere ike ime ihe fọrọ nke nta ka ọ bụrụ usoro ọ bụla ( A na-enweta usoro yiri nke ahụ, dịka ọmụmaatụ, na Django , naanị n'ebe ahụ ihe nhazi ahụ bụ ntọala ntọala / ngwugwu n'onwe ya).

A na-enweta ike/gbanyụọ ụdị nkwado ntinye akpaaka site na iji ụzọ abụọ - enable_automatic_type_cast() na disable_automatic_type_cast(). Nke a nwere ike ịdị mma ma ọ bụrụ na mgbanwe gburugburu ebe obibi nwere ihe dị ka JSON serialized ma ọ bụ ọbụna naanị Boolean na-adịgide adịgide (na-edozi mgbanwe DEBUG na Django nke ọma site n'iji mgbanwe gburugburu ebe obibi na ụdọ "ezigbo" bụ otu n'ime ihe ndị a na-ahụkarị). Ma ugbu a, ọ dịghị mkpa n'ụzọ doro anya tọghata urụk - ọtụtụ n'ime ihe ndị dị mkpa omume na-ama agbakwunyere n'ime omimi nke ọbá akwụkwọ na-na-eche naanị a mgbaàmà ime. 🙂 N'ozuzu, dee ihe na-arụ ọrụ nke ọma ma na-akwado ihe fọrọ nke nta ka ọ bụrụ ụdị data arụnyere n'ime (frozenset, complex and bytes anwaleghị).

Emebere ihe a chọrọ iji kwado Python 2 n'ihe fọrọ nke nta ka ọ bụrụ àjà ọ bụla (mhapụ nke dee na ụfọdụ "candies sugar" nke nsụgharị Python 3 kachasị ọhụrụ), karịsịa, ekele maka isii (iji dozie nsogbu nke iji metaclasses). ).

Mana enwere mgbochi ụfọdụ:

  • Nkwado Python 3 pụtara ụdị 3.5 na elu (ọnụnọ ha na ọrụ gị bụ n'ihi ịdị umengwụ ma ọ bụ enweghị mkpa maka ndozi, ebe ọ bụ na ọ siri ike iwepụta ebumnuche ebumnuche ị ka nọ na 3.4);
  • Na Python 2.7, ọbá akwụkwọ anaghị akwado ịwepụ mkpụrụ okwu nkịtị. Nkọwa ebe a. Ma ọ bụrụ na onye ọ bụla chọrọ ime ya, ị na-anabata :);

Ọbá akwụkwọ ahụ nwekwara usoro dịpụrụ adịpụ ma ọ bụrụ na a na-enyocha mperi. Ọ bụrụ na ndị nyocha ọ bụla dịnụ enweghị ike ịmata eriri ahụ, uru ya na-anọgide na-abụ eriri (kama, n'ihi ihe dị mma na ndakọrịta azụ na mgbagha na-emebu nke ka mgbanwe na-arụ ọrụ na Bash).

Python-shell ụlọ akwụkwọ

Ugbu a, m ga-agwa gị banyere ọbá akwụkwọ nke abụọ (M ga-ahapụ nkọwa nke adịghị ike nke analogues dị ugbu a - ọ dị ka nke a kọwara maka smart-env. Analogues - ebe a и ebe a).

N'ozuzu, echiche nke mmejuputa iwu na ihe ndị a chọrọ maka ya yiri ndị a kọwara maka smart-env, dị ka a pụrụ ịhụ site na ihe atụ:

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

Echiche bụ nke a:

  1. Otu klas nke na-anọchite anya Bash na ụwa Python;
  2. A na-akpọ iwu Bash ọ bụla dịka ọrụ nke klas Shell;
  3. A na-ebufe paramita maka oku ọrụ ọ bụla n'ime oku iwu Bash kwekọrọ;
  4. A na-eme iwu ọ bụla "ebe a na ugbu a" n'oge a na-akpọ ya, i.e. usoro mmekọrịta na-arụ ọrụ;
  5. ọ ga-ekwe omume ịnweta mmepụta nke iwu na stdout, yana koodu nloghachi ya;
  6. Ọ bụrụ na iwu ahụ adịghị na sistemu ahụ, a na-atụba ewepu.

Dịka ọ dị na smart-env, enwere nkwado maka Python 2 (ọ bụ ezie na achọrọ ntakịrị ọbara ịchụ aja) na enweghị nkwado maka Python 3.0-3.4.

Atụmatụ mmepe ụlọ akwụkwọ

Ị nwere ike iji ọba akwụkwọ ugbu a: ebisara ha abụọ na PyPI gọọmentị. Isi mmalite dị na Github (lee n'okpuru).

A ga-emepụta ọba akwụkwọ abụọ ahụ na-eburu n'uche nzaghachi anakọtara n'aka ndị nwere mmasị. Ma, ọ bụrụ na ọ nwere ike isiri gị ike iwepụta ụdị ọhụrụ dị iche iche na smart-env, mgbe ahụ na python-shell enwere ihe ọzọ ị ga-agbakwunye:

  • nkwado maka oku anaghị egbochi;
  • ohere nke mkparịta ụka mmekọrịta na otu (na-arụ ọrụ na stdin);
  • na-agbakwụnye ihe ọhụrụ (dịka ọmụmaatụ, ihe onwunwe iji nweta mmepụta site na stderr);
  • mmejuputa akwụkwọ ndekọ aha nke iwu dị (maka iji ọrụ dir() mee ihe;
  • na ihe ndị ọzọ.

zoro

  1. Ọbá akwụkwọ smart-env: Github и P&IP
  2. Python-shell ọba akwụkwọ: Github и P&IP
  3. Telegram ọwa mmelite n'ọbá akwụkwọ

UPD 23.02.2020/XNUMX/XNUMX:
* Ebugharịla ebe nchekwa, emelitela njikọ kwekọrọ
A na-akwado ụdị python-shell==1.0.1 maka mwepụta na 29.02.2020/XNUMX/XNUMX. Mgbanwe gụnyere nkwado maka iwu autocomplete na iwu dir(Shell), iwu na-eji ihe nchọpụta Python na-adịghị mma, yana ndozi ahụhụ.

isi: www.habr.com

Tinye a comment