Ho etsa setsoalle sa Python le Bash: lilaebrari tse bohlale-env le python-shell

Letsatsi le letle bohle.

Kajeno, Python ke e 'ngoe ea lipuo tse sebelisoang haholo lefapheng la ho iketsetsa lihlahisoa tsa software feela, empa hape le ho fana ka lisebelisoa tsa tsona. Ka lebaka leo, li-devops tse ngata, ebang ke ka thato ea tsona kapa khahlanong le eona, li ile tsa tlameha ho ithuta puo e ncha bakeng sa ho e sebelisa hamorao e le tlatsetso ea mangolo a khale a Bash. Leha ho le joalo, Bash le Python ba ipolela hore ba na le mekhoa e fapaneng ea ho ngola khoutu mme ba na le likarolo tse itseng, ho bolelang hore ho tsamaisa mangolo a Bash ho "puo ea noha" ka linako tse ling ho fetoha mosebetsi o matla le o hole le mosebetsi o sa reng letho.

Ho nolofatsa bophelo bakeng sa li-devops, lilaebrari tse ngata tse molemo le lits'ebeletso tsa Python li entsoe mme li ntse li tsoela pele ho etsoa. Sengoliloeng sena se hlalosa lilaebrari tse peli tse ncha tse entsoeng ke sengoli sa poso ena - bohlale-env и khetla ea python - mme e etselitsoe ho imolla li-devops tlhokahalong ea ho ela hloko haholo mathata a ho sebetsa le Python, ho siea sebaka sa mesebetsi e meng e khahlisang. Sebaka sa ts'ebetso ea lilaebrari ke maemo a fapaneng a tikoloho le ho qala lits'ebeletso tsa kantle.

Mang kapa mang ea nang le thahasello, ka kopo bona katse.

"Libaesekele" tse ncha?

Ho ka bonahala eka, ke hobane'ng ha u theha liphutheloana tse ncha bakeng sa ts'ebetso e tloaelehileng? Ke eng e u thibelang ho sebelisa os.environ le subprocess.<mokhoa kapa sehlopha sa khetho ea hau> ka kotloloho?

Ke tla fana ka bopaki molemong oa e 'ngoe le e 'ngoe ea lilaebrari ka thoko.

laeborari ea bohlale-env

Pele u ngola mohopolo oa hau, ho molemo ho kena inthaneteng le ho batla litharollo tse seng li entsoe. Ha e le hantle, ho na le kotsi ea ho se fumane seo u se hlokang, empa sena ke "ketsahalo ea inshorense". E le molao, mokhoa ona o sebetsa mme o boloka nako e ngata le boiteko.

Ho latela liphetho batla tse latelang li ile tsa senoloa:

  • ho na le liphutheloana tse phuthelang li-call ho os.environ, empa ka nako e ts'oanang li hloka liketso tse ngata tse sitisang (ho etsa mohlala oa sehlopha, litekanyetso tse khethehileng tsa mehala, joalo-joalo);
  • Ho na le liphutheloana tse ntle, tseo, leha ho le joalo, li tlamelletsoeng ka thata ho tikoloho e itseng (haholo-holo meralo ea marang-rang e kang Django) 'me kahoo ha e na bokahohle ntle le faele;
  • ho na le liteko tse sa tloaelehang tsa ho etsa ntho e ncha. Ka mohlala, eketsa ho thaepa le ho hlalosa ka ho hlaka litekanyetso tse fapaneng ka ho bitsa mekhoa e kang
    get_<typename>(var_name)

    Kapa mona tharollo e 'ngoe hape, eo, leha ho le joalo, e sa tšehetseng Python 2 e seng e hlabiloe ke lihlong (eo, leha ho le joalo RIP ea semmuso, ho ntse ho e-na le lithaba tse ngotsoeng ka mokhoa o ngotsoeng le tikoloho eohle ea tikoloho);

  • Ho na le mesebetsi ea matsoho ea liithuti tsa sekolo eo, ka mabaka a sa tsejoeng, a ileng a qetella a le PyPI e ka holimo 'me a baka mathata feela ka ho reha liphutheloana tse ncha (haholo-holo, lebitso "smart-env" ke tekanyo e hlokahalang).

'Me lethathamo lena le ka tsoela pele ka nako e telele. Leha ho le joalo, lintlha tse ka holimo li ne li lekane ho etsa hore ke thabele mohopolo oa ho etsa ntho e bonolo le ea bokahohle.

Litlhokahalo tse neng li behiloe pele ho ngola smart-env:

  • Mokhoa o bonolo ka ho fetisisa oa tšebeliso
  • Tšehetso ea ho thaepa ha data e ka lokisoang habonolo
  • Python 2.7 e lumellana
  • Tšireletso e ntle ea khoutu ka liteko

Qetellong, sena sohle se ile sa phethahala. Mona ke mohlala oa tšebeliso:

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

Joalokaha u bona mohlaleng, ho sebetsa le sehlopha se secha, u hloka feela ho e kenya kantle (ha ho hlokahale hore u thehe mohlala - ho tlosa ketso e eketsehileng). Ho fihlella ho feto-fetoha leha e le efe ea tikoloho ho finyelloa ka ho bua ka eona e le phapang ea sehlopha sa ENV, seo, ha e le hantle, se etsang hore sehlopha sena e be sekoahelo se utloahalang bakeng sa tikoloho ea tsamaiso ea tlhaho, ha ka nako e le 'ngoe e se fetola ntho e ka khonehang ea ho hlophisa hoo e batlang e le tsamaiso leha e le efe ( mokhoa o ts'oanang, ka mohlala, o finyelloa ho Django, feela moo ntho ea tlhophiso e leng module ea litlhophiso / sephutheloana ka boeona).

Ho nolofaletsa/ho tima mokhoa oa tšehetso oa ho thaepa oa othomathike ho fihleloa ka mekhoa e 'meli - enable_automatic_type_cast() le disable_automatic_type_cast(). Sena se ka ba bonolo haeba phetoho ea tikoloho e na le ntho e tšoanang le ea JSON kapa esita le Boolean e sa fetoheng (ho beha ka ho hlaka phetoho ea DEBUG ho Django ka ho bapisa phetoho ea tikoloho le likhoele tse "lokelehileng" ke e 'ngoe ea linyeoe tse tloaelehileng). Empa hona joale ha ho na tlhoko ea ho fetola likhoele ka ho hlaka - boholo ba liketso tse hlokahalang li se li kentsoe botebong ba laebrari 'me li emetse feela hore pontšo e sebetse. 🙂 Ka kakaretso, ho thaepa ho sebetsa ka mokhoa o pepeneneng 'me ho tšehetsa hoo e batlang e le mefuta eohle e fumanehang ea data e hahiloeng (frozenset, complex and bytes ha ea lekoa).

Tlhokahalo ea ho tšehetsa Python 2 e ile ea kenngoa ts'ebetsong ntle le boitelo (ho tlohela ho thaepa le tse ling tsa "lipompong tsa tsoekere" tsa liphetolelo tsa morao-rao tsa Python 3), haholo-holo, ka lebaka la tse tšeletseng tse fumanehang hohle (ho rarolla mathata a ho sebelisa metaclasses). ).

Empa ho na le lithibelo tse ling:

  • Tšehetso ea Python 3 e bolela mofuta oa 3.5 le ho feta (ho ba teng ha bona morerong oa hau ke phello ea botsoa kapa ho hloka tlhokahalo ea lintlafatso, kaha ho thata ho hlahisa lebaka la sepheo sa hore na u ntse u le 3.4);
  • Ho Python 2.7, laeborari ha e tšehetse ho nyenyefatsoa ha li-sete literals. Tlhaloso mona. Empa haeba mang kapa mang a batla ho e kenya ts'ebetsong, o amohelehile :);

Laeborari e boetse e na le mokhoa o ikhethileng haeba ho na le liphoso tsa ho arola. Haeba khoele e ne e ke ke ea hlokomeloa ke bahlahlobisisi ba teng, boleng bo lula e le khoele (ho e-na le hoo, ka mabaka a boiketlo le ho lumellana ka morao le mohopolo o tloaelehileng oa hore na mefuta e mengata e sebetsa joang ho Bash).

laebrari ea python-shell

Hona joale ke tla u bolella ka laeborari ea bobeli (ke tla siea tlhaloso ea mefokolo ea li-analogues tse teng - e tšoana le e hlalositsoeng bakeng sa smart-env. Analogues - mona и mona).

Ka kakaretso, mohopolo oa ts'ebetsong le litlhoko tsa ona li tšoana le tse hlalositsoeng bakeng sa smart-env, joalo ka ha ho ka bonoa mohlaleng:

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

Khopolo ke ena:

  1. Sehlopha se le seng se emelang Bash lefatšeng la Python;
  2. Taelo ka 'ngoe ea Bash e bitsoa mosebetsi oa sehlopha sa Shell;
  3. Mekhahlelo ea mohala o mong le o mong oa ts'ebetso e ntan'o fetisetsoa pitsong ea taelo ea Bash;
  4. Taelo e 'ngoe le e' ngoe e phethisoa "mona le hona joale" ka nako eo e bitsoang ka eona, i.e. mokhoa oa synchronous o sebetsa;
  5. hoa khoneha ho fihlella tlhahiso ea taelo ho stdout, hammoho le khoutu ea eona ea ho khutla;
  6. Haeba taelo e le sieo tsamaisong, ho lahleloa mokhelo.

Joalo ka smart-env, ho na le ts'ehetso bakeng sa Python 2 (le hoja ho ne ho hlokahala mali a seng makae a sehlabelo) mme ha ho na tšehetso bakeng sa Python 3.0-3.4.

Merero ea ntlafatso ea libuka

U ka sebelisa lilaebrari hona joale: ka bobeli li ngotsoe ho PyPI ea molao. Mehloli e fumaneha ho Github (sheba ka tlase).

Lilaebrari ka bobeli li tla ntlafatsoa ho ela hloko maikutlo a bokelletsoeng ho tsoa ho ba thahasellang. 'Me, haeba ho ka ba thata ho hlahisa mefuta e fapaneng ea likarolo tse ncha ho smart-env, joale ho python-shell ho na le ntho e' ngoe eo u ka e eketsang:

  • tšehetso bakeng sa mehala e sa thibeleng;
  • monyetla oa puisano e kopanetsoeng le sehlopha (ho sebetsa le stdin);
  • ho eketsa thepa e ncha (mohlala, thepa ea ho fumana tlhahiso e tsoang ho stderr);
  • ts'ebetsong ea lethathamo la litaelo tse fumanehang (bakeng sa tšebeliso le dir () mosebetsi);
  • joalo-joalo.

litšupiso

  1. smart-env library: Github и PyPI
  2. laebrari ea python-shell: Github и PyPI
  3. Mocha oa thelekramo lintlafatso tsa laeborari

UPD 23.02.2020/XNUMX/XNUMX:
* Libaka tsa polokelo li tlositsoe, lihokelo tse tsamaellanang li ntlafalitsoe
* Phetolelo ea python-shell==1.0.1 e ntse e lokisetsoa tokollo ka la 29.02.2020/XNUMX/XNUMX. Liphetoho li kenyelletsa ts'ehetso bakeng sa taelo ea autocomplete le taelo ea dir(Shell), ho tsamaisa litaelo ka sekhetho se sa sebetseng sa Python, le ho lokisa liphoso.

Source: www.habr.com

Eketsa ka tlhaloso