Ṣiṣe Python ati Bash Ọrẹ: smart-env ati awọn ile-ikawe Python-ikarahun

O dara ọjọ gbogbo eniyan.

Loni, Python jẹ ọkan ninu awọn ede ti a lo julọ ni aaye ti ṣiṣẹda kii ṣe awọn ọja sọfitiwia funrararẹ, ṣugbọn tun pese awọn amayederun wọn. Bi abajade, ọpọlọpọ awọn olufọkansin, boya nipasẹ ifẹ wọn tabi lodi si rẹ, ni lati kọ ede titun kan fun lilo nigbamii bi afikun si awọn iwe afọwọkọ Bash atijọ ti o dara. Bibẹẹkọ, Bash ati Python jẹri awọn ọna oriṣiriṣi si koodu kikọ ati ni awọn ẹya kan, afipamo pe gbigbe awọn iwe afọwọkọ Bash si “ede ejo” nigbakan wa lati jẹ agbara ati jinna si iṣẹ-ṣiṣe bintin.

Lati jẹ ki igbesi aye rọrun fun awọn devops, ọpọlọpọ awọn ile-ikawe ti o wulo ati awọn ohun elo ni Python ti ṣẹda ati tẹsiwaju lati ṣẹda. Nkan yii ṣe apejuwe awọn ile-ikawe tuntun meji ti o ṣẹda nipasẹ onkọwe ti ifiweranṣẹ yii - smart-env и Python-ikarahun - ati ti a ṣe lati ṣe iranlọwọ fun awọn devops lati iwulo lati san ifojusi pupọ si awọn intricacies ti ṣiṣẹ pẹlu Python, nlọ yara fun awọn iṣẹ ṣiṣe ti o nifẹ diẹ sii. Iwọn iṣẹ ṣiṣe ti awọn ile-ikawe jẹ awọn oniyipada ayika ati ifilọlẹ awọn ohun elo ita.

Ẹnikẹni nife, jọwọ wo ologbo.

Tuntun "awọn kẹkẹ"?

Yoo dabi, kilode ti o ṣẹda awọn idii tuntun fun awọn iṣẹ ṣiṣe lasan deede? Kini o ṣe idiwọ fun ọ lati lo os.environ ati subprocess.<ọna tabi kilasi ti o fẹ> taara?

Emi yoo pese ẹri ni ojurere ti ọkọọkan awọn ile-ikawe lọtọ.

smart-env ìkàwé

Ṣaaju ki o to kọ ọmọ-ọpọlọ tirẹ, o wulo lati lọ si ori ayelujara ati wa awọn ojutu ti a ti ṣetan. Nitoribẹẹ, ewu kan wa ti ko rii ohun ti o nilo, ṣugbọn eyi jẹ dipo “iṣẹlẹ iṣeduro”. Gẹgẹbi ofin, ọna yii n ṣiṣẹ ati fi akoko pupọ ati igbiyanju pamọ.

Ni ibamu si awọn abajade wa atẹle naa ti ṣafihan:

  • awọn idii wa ti o fi ipari si awọn ipe si os.environ, ṣugbọn ni akoko kanna nilo opo ti awọn iṣe idamu (ṣiṣẹda apẹẹrẹ ti kilasi, awọn aye pataki ni awọn ipe, ati bẹbẹ lọ);
  • Awọn idii ti o dara wa, eyiti, sibẹsibẹ, ti so ni pipe si ilolupo ilolupo kan (paapaa awọn ilana wẹẹbu bii Django) ati nitorinaa kii ṣe ni gbogbo agbaye laisi faili kan;
  • awọn igbiyanju toje wa lati ṣe nkan tuntun. Fun apere, fi titẹ sii ati ki o ṣe itupalẹ awọn iye oniyipada ni ṣoki nipa pipe awọn ọna bii
    get_<typename>(var_name)

    Tabi nibi ọkan diẹ ojutu, eyiti, sibẹsibẹ, ko ṣe atilẹyin Python 2 ti o ni itiju bayi (eyiti, laibikita osise RIP, awọn oke-nla ti koodu kikọ ati gbogbo awọn ilolupo eda abemi tun wa);

  • Awọn iṣẹ ọnà ọmọ ile-iwe wa ti, fun diẹ ninu awọn idi aimọ, pari ni oke PyPI ati pe o ṣẹda awọn iṣoro nikan pẹlu sisọ orukọ awọn idii tuntun (ni pataki, orukọ “smart-env” jẹ iwọn pataki).

Ati pe atokọ yii le tẹsiwaju fun igba pipẹ. Sibẹsibẹ, awọn aaye ti o wa loke to lati jẹ ki inu mi dun nipa imọran ṣiṣe nkan ti o rọrun ati gbogbo agbaye.

Awọn ibeere ti a ṣeto ṣaaju kikọ smart-env:

  • Ilana lilo ti o rọrun julọ
  • Atilẹyin titẹ data atunto ni irọrun
  • Python 2.7 ni ibamu
  • Iboju koodu to dara nipasẹ awọn idanwo

Nikẹhin, gbogbo eyi ni a ṣe. Eyi ni apẹẹrẹ ti lilo:

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

Gẹgẹbi o ti le rii lati apẹẹrẹ, lati ṣiṣẹ pẹlu kilasi tuntun, o kan nilo lati gbe wọle (iwọ ko nilo lati ṣẹda apẹẹrẹ - iyokuro iṣe afikun). Wiwọle si eyikeyi oniyipada ayika jẹ aṣeyọri nipasẹ tọka si bi oniyipada ti kilasi ENV, eyiti, ni otitọ, jẹ ki kilasi yii jẹ iwe-iṣọ inu inu fun agbegbe eto abinibi, lakoko titan ni nigbakannaa sinu ohun atunto ti o ṣeeṣe fun fere eyikeyi eto ( ọna ti o jọra, fun apẹẹrẹ, ti waye ni Django , nikan nibẹ ni ohun iṣeto ni module eto / akopọ funrararẹ).

Muu ṣiṣẹ / pa ipo atilẹyin titẹ laifọwọyi waye ni lilo awọn ọna meji - agbara_automatic_type_cast () ati disable_automatic_type_cast (). Eyi le jẹ irọrun ti o ba jẹ pe oniyipada ayika ni nkan ti o jọmọ JSON ti o tẹlera tabi paapaa kan ibakan Boolean (itọkasi eto oniyipada DEBUG ni Django nipa ifiwera oniyipada ayika pẹlu awọn okun “wulo” jẹ ọkan ninu awọn ọran ti o wọpọ julọ). Ṣugbọn ni bayi ko si iwulo lati yi awọn gbolohun ọrọ pada ni gbangba - pupọ julọ awọn iṣe pataki ti wa tẹlẹ ti ifibọ sinu awọn ijinle ti ile-ikawe ati pe wọn kan nduro fun ifihan agbara lati ṣiṣẹ. 🙂 Ni gbogbogbo, titẹ ṣiṣẹ ni gbangba ati pe o fẹrẹ ṣe atilẹyin gbogbo awọn iru data ti a ṣe sinu rẹ (igi didi, eka ati awọn baiti ko ni idanwo).

Ibeere lati ṣe atilẹyin Python 2 ni imuse pẹlu fere ko si awọn irubọ (fifi silẹ ti titẹ ati diẹ ninu awọn “suwiti suga” ti awọn ẹya tuntun ti Python 3), ni pataki, o ṣeun si awọn mẹfa ti o wa nibi gbogbo (lati yanju awọn iṣoro ti lilo awọn kilasi meta). ).

Ṣugbọn awọn ihamọ kan wa:

  • Atilẹyin Python 3 tumọ si ẹya 3.5 ati ti o ga julọ (niwaju wọn ninu iṣẹ akanṣe rẹ jẹ abajade ti boya ọlẹ tabi aini iwulo fun awọn ilọsiwaju, nitori o nira lati wa pẹlu idi idi idi ti o tun wa lori 3.4);
  • Ni Python 2.7, ile-ikawe ko ṣe atilẹyin isọdọtun ti awọn ọrọ gangan ti ṣeto. Apejuwe nibi. Ṣugbọn ti ẹnikẹni ba fẹ lati ṣe imuse rẹ, o ṣe itẹwọgba :);

Ile-ikawe naa tun ni ẹrọ imukuro ni ọran ti awọn aṣiṣe itupalẹ. Ti okun naa ko ba le ṣe idanimọ nipasẹ eyikeyi awọn olutupalẹ ti o wa, iye naa jẹ okun kan (dipo, fun awọn idi ti irọrun ati ibaramu sẹhin pẹlu ọgbọn deede ti bii awọn oniyipada ṣe n ṣiṣẹ ni Bash).

Python-ikarahun ìkàwé

Bayi Emi yoo sọ fun ọ nipa ile-ikawe keji (Emi yoo fi apejuwe ti awọn ailagbara ti awọn analogues ti o wa tẹlẹ silẹ - o jẹ iru ti a ṣalaye fun smart-env. Analogues - nibi и nibi).

Ni gbogbogbo, imọran ti imuse ati awọn ibeere fun rẹ jẹ iru awọn ti a ṣalaye fun smart-env, bi a ti le rii lati apẹẹrẹ:

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

Ero naa ni eyi:

  1. A nikan kilasi ti o duro Bash ni Python aye;
  2. Aṣẹ Bash kọọkan ni a pe gẹgẹbi iṣẹ ti kilasi Shell;
  3. Awọn paramita fun ipe iṣẹ kọọkan lẹhinna kọja sinu ipe aṣẹ Bash ti o baamu;
  4. Aṣẹ kọọkan ti wa ni ṣiṣe “nibi ati ni bayi” ni akoko ti o pe, i.e. ọna amuṣiṣẹpọ ṣiṣẹ;
  5. o ṣee ṣe lati wọle si abajade ti aṣẹ ni stdout, bakanna bi koodu ipadabọ rẹ;
  6. Ti aṣẹ ko ba si ninu eto, a da ohun sile.

Bi pẹlu smart-env, atilẹyin wa fun Python 2 (biotilejepe a nilo ẹjẹ diẹ diẹ sii) ati pe ko si atilẹyin fun Python 3.0-3.4.

Awọn eto idagbasoke ile-ikawe

O le lo awọn ile-ikawe ni bayi: awọn mejeeji ti wa ni fifiranṣẹ lori PyPI osise. Awọn orisun wa lori Github (wo isalẹ).

Awọn ile-ikawe mejeeji yoo ni idagbasoke ni akiyesi awọn esi ti a gba lati ọdọ awọn ti o nifẹ si. Ati pe, ti o ba le nira lati wa pẹlu ọpọlọpọ awọn ẹya tuntun ni smart-env, lẹhinna ni python-shell, dajudaju nkan miiran wa lati ṣafikun:

  • atilẹyin fun ti kii-ìdènà awọn ipe;
  • seese ti ibaraẹnisọrọ ibaraẹnisọrọ pẹlu ẹgbẹ (ṣiṣẹ pẹlu stdin);
  • fifi titun-ini (fun apẹẹrẹ, ohun ini lati gba o wu lati stderr);
  • imuse liana ti awọn aṣẹ ti o wa (fun lilo pẹlu iṣẹ dir ());
  • ati bẹbẹ lọ.

jo

  1. ile-ikawe smart-env: Github и P&PI
  2. ibi ikawe Python-shell: Github и P&PI
  3. Telegram ikanni awọn imudojuiwọn ìkàwé

UPD 23.02.2020/XNUMX/XNUMX:
* Awọn ibi ipamọ ti gbe, awọn ọna asopọ ti o baamu ti ni imudojuiwọn
* Ẹya Python-shell==1.0.1 ti wa ni ipese fun itusilẹ ni ọjọ 29.02.2020/XNUMX/XNUMX. Awọn iyipada pẹlu atilẹyin fun pipaṣẹ autocomplete ati pipaṣẹ dir(Shell), awọn pipaṣẹ ṣiṣe pẹlu idanimọ Python ti ko tọ, ati awọn atunṣe kokoro.

orisun: www.habr.com

Fi ọrọìwòye kun