Hana i ka Python a me Bash Friendship: smart-env a me python-shell hale waihona puke

lā maikaʻi kākou a pau.

I kēia lā, ʻo Python kekahi o nā ʻōlelo i hoʻohana nui ʻia i ka hana ʻana ʻaʻole wale i nā huahana lako polokalamu iā lākou iho, akā hāʻawi pū kekahi i kā lākou ʻoihana. ʻO ka hopena, he nui nā devops, inā ma muli o ko lākou makemake a i ʻole ke kūʻē iā ia, pono e aʻo i kahi ʻōlelo hou no ka hoʻohana hope ʻana i mea hoʻohui i nā palapala Bash kahiko maikaʻi. Eia nō naʻe, ʻōlelo ʻo Bash a me Python i nā ala like ʻole i ke kākau ʻana i nā code a loaʻa iā ia kekahi mau hiʻohiʻona, ʻo ia hoʻi, ʻo ka lawe ʻana i nā palapala Bash i ka "'ōlelo nahesa" i kekahi manawa e lilo i mea maʻalahi a mamao loa mai ka hana ʻole.

I mea e maʻalahi ai ke ola no nā devops, nui nā hale waihona puke a me nā pono hana ma Python i hana ʻia a hoʻomau ʻia. Hōʻike kēia ʻatikala i ʻelua hale waihona puke hou i hana ʻia e ka mea kākau o kēia pou - akamai-env и pūpū-python - a hoʻolālā ʻia e hōʻoluʻolu i nā devops mai ka pono e uku nui i ka paʻakikī o ka hana ʻana me Python, e waiho ana i kahi lumi no nā hana hoihoi. ʻO ke ʻano o ka hana o nā hale waihona puke nā mea hoʻololi kaiapuni a me ka hoʻomaka ʻana i nā pono hana waho.

ʻO ka mea hoihoi, e ʻoluʻolu e ʻike i ka pōpoki.

Nā "paikikala" hou?

Me he mea lā, no ke aha e hana ai i nā pūʻolo hou no nā hana maʻamau? He aha ka mea e pale ai iā ʻoe mai ka hoʻohana pololei ʻana i ka os.environ a me ka subprocess.<ʻano a i ʻole papa āu e koho ai?

E hāʻawi au i nā hōʻike e pili ana i kēlā me kēia hale waihona puke.

hale waihona puke akamai-env

Ma mua o kou kākau ʻana i kāu noʻonoʻo ponoʻī, pono e hele ma ka pūnaewele a e ʻimi i nā hoʻonā mākaukau. ʻOiaʻiʻo, aia ka pilikia o ka loaʻa ʻole o kāu mea e pono ai, akā ʻo kēia kahi "hanana inikua". Ma keʻano he kūlana, hana kēia ala a mālama i ka manawa a me ka hoʻoikaika.

Wahi a nā hopena ʻimi ua hōʻike ʻia kēia:

  • aia nā pūʻolo e hoʻopili maoli i nā kelepona i os.environ, akā i ka manawa like e koi ai i kahi hui o nā hana hoʻonāukiuki (hana i kahi ʻano o kahi papa, nā ʻāpana kūikawā i nā kelepona, a pēlā aku);
  • Aia nā pūʻolo maikaʻi, akā naʻe, pili paʻa i kahi kaiaola kikoʻī (ʻoi aku ka nui o nā ʻōnaehana pūnaewele e like me Django) a no laila ʻaʻole loa i ke ao holoʻokoʻa me ka ʻole o kahi faila;
  • kakaikahi ka hoao ana e hana i kekahi mea hou. ʻo kahi laʻana, hoʻohui i ke kākau ʻana a hoʻokaʻawale pololei i nā waiwai ʻokoʻa ma ke kāhea ʻana i nā ʻano like
    get_<typename>(var_name)

    A i ʻole ma ʻaneʻi hoʻokahi hoʻonā, ʻaʻole naʻe i kākoʻo i ka Python 2 i kēia manawa (ʻoiai, ʻoiai RIP kūhelu, aia nō nā mauna i kākau ʻia a me nā kaiaola holoʻokoʻa);

  • Aia nā hana hana kula-haumāna, no kekahi kumu i ʻike ʻole ʻia, ua pau i ka PyPI uka a hana wale i nā pilikia me ka inoa ʻana i nā pūʻolo hou (ʻo ia hoʻi, ʻo ka inoa "smart-env" kahi ana kūpono).

A hiki ke hoʻomau kēia papa inoa no ka manawa lōʻihi. Eia nō naʻe, ua lawa nā mea i luna i mea e hauʻoli ai iaʻu i ka manaʻo o ka hana ʻana i kahi mea maʻalahi a maʻamau.

Nā koi i hoʻonohonoho ʻia ma mua o ke kākau ʻana i ka smart-env:

  • ʻO ka papahana hoʻohana maʻalahi loa
  • Kākoʻo kikokiko ʻikepili maʻalahi
  • ʻO Python 2.7 kūpono
  • ʻO ka uhi code maikaʻi e nā hoʻokolohua

I ka hopena, ua hoʻokō ʻia kēia mau mea a pau. Eia kekahi laʻana o ka hoʻohana ʻana:

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

E like me kāu e ʻike ai mai ka laʻana, e hana me kahi papa hou, pono ʻoe e hoʻokomo iā ia (ʻaʻole pono ʻoe e hana i kahi laʻana - hoʻemi i ka hana keu). Loaʻa ka loaʻa ʻana i kekahi ʻano hoʻololi kaiapuni ma ka ʻōlelo ʻana iā ia ma ke ʻano he ʻano hoʻololi o ka papa ENV, ʻoiaʻiʻo, e hoʻolilo i kēia papa i mea hoʻopili intuitive no ka ʻōnaehana ʻōnaehana maoli, ʻoiai e hoʻohuli iā ia i mea hiki ke hoʻonohonoho ʻia no nā ʻōnaehana āpau ( ʻO kahi ala like, no ka laʻana, loaʻa iā Django , aia wale nō ka mea hoʻonohonoho i ka module hoʻonohonoho / pūʻulu ponoʻī).

Hiki ke ho'ā a ho'opau i ke 'ano kāko'o pa'i 'akomi ma ka ho'ohana 'ana i 'elua ala - enable_automatic_type_cast() a me disable_automatic_type_cast(). Hiki ke maʻalahi kēia inā loaʻa i ka mea hoʻololi kaiapuni kahi mea like JSON-like a i ʻole he Boolean mau (e hoʻonohonoho pono ana i ka hoʻololi DEBUG ma Django ma ka hoʻohālikelike ʻana i ke ʻano o ke kaiapuni me nā string "valid" kekahi o nā hihia maʻamau). Akā i kēia manawa ʻaʻohe pono e hoʻololi i nā kaula - ʻo ka hapa nui o nā hana e pono ai ua hoʻokomo ʻia i loko o ka hohonu o ka waihona a ke kali wale nei i kahi hōʻailona e hana. 🙂 Ma keʻano laulā, hana ʻia ka paʻi ʻana me ka maopopo a kākoʻo i nā ʻano ʻikepili i kūkulu ʻia i loaʻa (ʻaʻole i hoʻāʻo ʻia ka frozenset, complex and bytes).

Ua hoʻokō ʻia ke koi e kākoʻo iā Python 2 me ka ʻole o nā ʻālana (ka haʻalele ʻana i ka paʻi ʻana a me kekahi o nā "ʻokoʻa gula" o nā mana hou loa o Python 3), ma ke ʻano, mahalo i nā ʻeono maʻamau (e hoʻoponopono i nā pilikia o ka hoʻohana ʻana i nā metaclasses. ).

Akā aia kekahi mau palena:

  • ʻO ke kākoʻo ʻo Python 3 ʻo ia ka mana 3.5 a ʻoi aku ke kiʻekiʻe (ʻo ko lākou hele ʻana i kāu papahana ʻo ia ka hopena o ka palaualelo a i ʻole ka nele o ka pono no ka hoʻomaikaʻi ʻana, no ka mea he paʻakikī ke loaʻa i kahi kumu kumu no ke aha ʻoe i ka 3.4);
  • Ma ka Python 2.7, ʻaʻole kākoʻo ka waihona i ka deserialization o nā literals set. wehewehe maanei. Akā inā makemake kekahi e hoʻokō, ʻoluʻolu ʻoe :);

Loaʻa i ka waihona kahi ʻano hana ʻokoʻa inā loaʻa nā hewa parsing. Inā ʻaʻole hiki ke ʻike ʻia ke kaula e kekahi o nā mea loiloi i loaʻa, e mau ana ka waiwai i kahi kaula (akā, no nā kumu o ka ʻoluʻolu a me ka hoʻohālikelike ʻana i hope me ka loina maʻamau o ka hana ʻana o nā mea hoʻololi i Bash).

hale waihona puke python-shell

I kēia manawa, e haʻi wau iā ʻoe e pili ana i ka lua o ka waihona (e haʻalele wau i ka wehewehe ʻana i nā hemahema o nā analogues e kū nei - ua like ia me ka mea i wehewehe ʻia no smart-env. Analogues - maanei и maanei).

Ma keʻano laulā, ua like ka manaʻo o ka hoʻokō a me nā koi no ia me nā mea i wehewehe ʻia no smart-env, e like me ka ʻike ʻia mai ka laʻana:

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

ʻO kēia ka manaʻo:

  1. ʻO kahi papa hoʻokahi e hōʻike ana iā Bash i ka honua Python;
  2. Kāhea ʻia kēlā me kēia kauoha Bash ma ke ʻano he hana o ka papa Shell;
  3. Hoʻokomo ʻia nā ʻāpana no kēlā me kēia kelepona hana i ke kāhea kauoha Bash pili;
  4. Hoʻokō ʻia kēlā me kēia kauoha "ma ʻaneʻi a i kēia manawa" i ka manawa i kapa ʻia ai, ʻo ia. hana ka hana like ʻole;
  5. hiki ke komo i ka hoʻopuka o kahi kauoha ma stdout, a me kāna code hoʻihoʻi;
  6. Inā ʻaʻole i loko o ka ʻōnaehana ke kauoha, hoʻolei ʻia kahi ʻokoʻa.

E like me ka smart-env, aia ke kākoʻo no Python 2 (ʻoiai ua koi ʻia kahi koko koko ʻoi aku ka nui) a ʻaʻohe kākoʻo no Python 3.0-3.4.

Nā papahana kūkulu hale waihona puke

Hiki iā ʻoe ke hoʻohana i nā hale waihona puke i kēia manawa: ua kau ʻia ʻelua ma ka PyPI mana. Loaʻa nā kumu ma Github (e ʻike i lalo).

E kūkulu ʻia nā hale waihona puke ʻelua me ka nānā ʻana i nā manaʻo i hōʻiliʻili ʻia mai ka poʻe hoihoi. A, inā paʻakikī paha ka loaʻa ʻana o nā hiʻohiʻona hou i ka smart-env, a laila i loko o ka python-shell he mea ʻē aʻe e hoʻohui ai:

  • kākoʻo no nā kelepona paʻa ʻole;
  • hiki ke kamaʻilio kūkākūkā me ka hui (hana me stdin);
  • hoʻohui i nā waiwai hou (no ka laʻana, waiwai e loaʻa ai ka huahana mai stderr);
  • ka hoʻokō ʻana i kahi papa kuhikuhi o nā kauoha i loaʻa (no ka hoʻohana ʻana me ka hana dir ());
  • a pēlā aku nō.

kūmole

  1. hale waihona puke smart-env: Github и ʻO PyPI
  2. hale waihona puke python-shell: Github и ʻO PyPI
  3. Kaila Telegram nā mea hou o ka waihona

UPD 23.02.2020/XNUMX/XNUMX:
* Ua hoʻoneʻe ʻia nā waihona, ua hōʻano hou ʻia nā loulou pili
* Ke hoʻomākaukau ʻia nei ka version python-shell == 1.0.1 no ka hoʻokuʻu ʻana ma 29.02.2020/XNUMX/XNUMX. Hoʻololi nā hoʻololi i ke kākoʻo no ke kauoha autocomplete a me ke kauoha dir(Shell), e holo ana i nā kauoha me kahi ʻike Python kūpono ʻole, a me nā hoʻoponopono bug.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka