Yin Python da Abokan Bash: smart-env da dakunan karatu na python-shell

Barka da rana kowa.

A yau, Python na ɗaya daga cikin yarukan da aka fi amfani da su a fagen ƙirƙirar ba wai kawai samfuran software da kansu ba, har ma da samar da ababen more rayuwa. A sakamakon haka, da yawa daga masu ba da izini, ko ta hanyar son su ko akasin sa, dole ne su koyi sabon yare don amfani da su daga baya a matsayin kari ga tsoffin rubutun Bash. Duk da haka, Bash da Python suna da'awar hanyoyi daban-daban don rubuta lambar kuma suna da wasu siffofi, ma'ana cewa aika rubutun Bash zuwa "harshen maciji" wani lokaci ya zama mai aiki da nisa daga ƙaramin aiki.

Don sauƙaƙa rayuwa ga deps, an ƙirƙiri ɗakunan karatu da abubuwan amfani da yawa a Python kuma ana ci gaba da ƙirƙira su. Wannan labarin ya bayyana sabbin ɗakunan karatu guda biyu waɗanda marubucin wannan post ɗin ya ƙirƙira - smart-env и python-harsashi - kuma an tsara shi don sauƙaƙe masu ba da izini daga buƙatar kulawa da yawa ga ɓarnawar aiki tare da Python, barin ɗaki don ƙarin ayyuka masu ban sha'awa. Iyalin ayyukan dakunan karatu shine masu canjin yanayi da ƙaddamar da abubuwan amfani na waje.

Duk mai sha'awar, da fatan za a duba cat.

Sabbin "kekuna"?

Zai yi kama, me yasa ƙirƙirar sabbin fakiti don ayyuka na yau da kullun? Me zai hana ku yin amfani da os.environ da subprocess.<Hanya ko ajin da kuka zaɓa> kai tsaye?

Zan ba da shaida ga kowane ɗayan ɗakunan karatu daban.

smart-env library

Kafin rubuta naku ƙwararrun ƙwararrun, yana da amfani don shiga kan layi don neman mafita da aka shirya. Tabbas, akwai haɗarin rashin gano abin da kuke buƙata, amma wannan shine wajen "lalacewar inshora". A matsayinka na mai mulki, wannan tsarin yana aiki kuma yana adana lokaci da ƙoƙari mai yawa.

A cewar sakamakon bincika an bayyana haka:

  • akwai fakiti waɗanda a zahiri nannade kira zuwa os.environ, amma a lokaci guda suna buƙatar gungun ayyuka masu jan hankali (ƙirƙirar misali na aji, sigogi na musamman a cikin kira, da sauransu);
  • Akwai fakiti masu kyau, waɗanda, duk da haka, an ɗaure su da takamaiman yanayin muhalli (galibi tsarin yanar gizo kamar Django) sabili da haka ba kwata-kwata ba ne na duniya ba tare da fayil ba;
  • akwai yunƙurin yin sabon abu da ba kasafai ba. Misali, ƙara bugawa kuma a fayyace madaidaicin ƙima ta hanyar kiran hanyoyin kamar
    get_<typename>(var_name)

    Ko a nan karin bayani daya, wanda, duk da haka, baya goyon bayan Python 2 da aka wulakanta (wanda, duk da haka hukuma RIP, har yanzu akwai tsaunukan rubuce-rubucen da aka rubuta da kuma dukan yanayin muhalli);

  • Akwai sana'o'in ɗalibin makaranta waɗanda, saboda wasu dalilai da ba a sani ba, sun ƙare a cikin PyPI na sama kuma kawai suna haifar da matsaloli tare da sunaye sabbin fakiti (musamman, sunan "smart-env" shine ma'auni mai mahimmanci).

Kuma wannan jerin na iya ci gaba na dogon lokaci. Duk da haka, abubuwan da ke sama sun isa su sa ni farin ciki game da ra'ayin yin wani abu mai dacewa da duniya.

Abubuwan da aka saita kafin rubuta smart-env:

  • Mafi sauƙin tsarin amfani
  • Taimakon buga bayanai cikin sauƙi mai daidaitawa
  • Python 2.7 mai jituwa
  • Kyakkyawan ɗaukar hoto ta gwaje-gwaje

Daga ƙarshe, duk wannan ya tabbata. Ga misalin amfani:

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

Kamar yadda kake gani daga misalin, don aiki tare da sabon aji, kawai kuna buƙatar shigo da shi (ba kwa buƙatar ƙirƙirar misali - ban da ƙarin aikin). Ana samun dama ga kowane canjin yanayi ta hanyar yin la'akari da shi azaman mai canzawa na aji na ENV, wanda, a zahiri, ya sa wannan aji ya zama abin rufewa mai fahimta don yanayin tsarin ƙasa, yayin da a lokaci guda juya shi zuwa wani abu mai yuwuwar daidaitawa don kusan kowane tsarin ( ana samun irin wannan hanya, alal misali, a cikin Django , kawai a can abin da aka tsara shine tsarin saiti / kunshin kanta).

Ana samun kunnawa/ kashe yanayin goyan bayan bugawa ta atomatik ta amfani da hanyoyi guda biyu - ikon_automatic_type_cast() da disable_automatic_type_cast(). Wannan na iya zama dacewa idan yanayin yanayi ya ƙunshi wani abu mai kama da JSON ko ma kawai Boolean akai-akai (a bayyane yake saita madaidaicin DEBUG a cikin Django ta hanyar kwatanta yanayin yanayi tare da igiyoyin "mai inganci" shine ɗayan mafi yawan lokuta). Amma yanzu babu buƙatar canza kirtani a sarari - yawancin ayyukan da suka wajaba an riga an saka su cikin zurfin ɗakin karatu kuma suna jiran sigina don aiki. 🙂 Gabaɗaya, bugawa yana aiki a bayyane kuma yana goyan bayan duk nau'ikan bayanan da aka gina a ciki (daskararre, hadaddun da bytes ba a gwada su ba).

An aiwatar da abin da ake buƙata don tallafawa Python 2 ba tare da sadaukarwa ba (ba da buga rubutu da wasu daga cikin "candies sugar" na sabbin nau'ikan Python 3), musamman godiya ga wurare shida (don magance matsalolin amfani da azuzuwan).

Amma akwai wasu ƙuntatawa:

  • Tallafin Python 3 yana nufin sigar 3.5 kuma mafi girma (kasancewarsu a cikin aikinku shine sakamakon ko dai kasala ko rashin buƙatar haɓakawa, tunda yana da wahala a fito da wani dalili na haƙiƙa wanda har yanzu kuna kan 3.4);
  • A cikin Python 2.7, ɗakin karatu baya goyan bayan ɓata madaidaitan kalmomin da aka saita. Bayani a nan. Amma idan wani yana son aiwatar da shi, ana maraba da ku :);

Laburaren kuma yana da hanyar keɓancewa idan akwai kurakurai na tantancewa. Idan ɗaya daga cikin masu nazarin da ke akwai ba zai iya gane kirtani ba, ƙimar ta kasance kirtani (a maimakon haka, saboda dalilai na dacewa da dacewa da baya tare da dabarun yau da kullun na yadda masu canji ke aiki a Bash).

python-shell library

Yanzu zan gaya muku game da ɗakin karatu na biyu (Ba zan bar bayanin gazawar analogues na yanzu ba - yana kama da wanda aka bayyana don smart-env. Analogues - a nan и a nan).

Gabaɗaya, ra'ayin aiwatarwa da buƙatunsa sun yi kama da waɗanda aka bayyana don smart-env, kamar yadda ake iya gani daga misalin:

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

Manufar ita ce:

  1. Aji guda ɗaya wanda ke wakiltar Bash a duniyar Python;
  2. Ana kiran kowane umarnin Bash azaman aikin aji na Shell;
  3. Ana shigar da sigogi don kowane kiran aiki zuwa cikin kiran Bash mai dacewa;
  4. Ana aiwatar da kowace umarni “nan da yanzu” a lokacin da ake kiran ta, watau. tsarin aiki tare yana aiki;
  5. yana yiwuwa don samun damar fitar da umarni a cikin stdout, da kuma lambar dawowar sa;
  6. Idan umarnin ba ya cikin tsarin, ana jefa banda.

Kamar yadda yake tare da smart-env, akwai goyon baya ga Python 2 (ko da yake an buƙaci ƙarin jini na hadaya) kuma babu tallafi ga Python 3.0-3.4.

Shirye-shiryen bunkasa ɗakin karatu

Kuna iya amfani da ɗakunan karatu yanzu: an buga su akan PyPI na hukuma. Ana samun tushe akan Github (duba ƙasa).

Za a haɓaka ɗakunan karatu biyun la'akari da ra'ayoyin da aka tattara daga masu sha'awar. Kuma, idan yana da wahala a fito da sabbin abubuwa iri-iri a cikin smart-env, to a cikin python-shell tabbas akwai wani abu kuma don ƙarawa:

  • goyan bayan kira maras toshewa;
  • yuwuwar sadarwar hulɗa tare da ƙungiyar (aiki tare da stdin);
  • ƙara sababbin kaddarorin (misali, dukiya don karɓar fitarwa daga stderr);
  • aiwatar da kundin umarni na samuwa (don amfani da aikin dir());
  • da sauransu.

nassoshi

  1. smart-env library: Github и PyPI
  2. python-shell library: Github и PyPI
  3. Telegram channel sabunta ɗakin karatu

UPD 23.02.2020/XNUMX/XNUMX:
* An matsar da wuraren ajiya, an sabunta hanyoyin haɗin gwiwa
Ana shirya sigar Python-shell==1.0.1 don fitowa ranar 29.02.2020/XNUMX/XNUMX. Canje-canje sun haɗa da goyan bayan umarnin autocomplete da umarnin dir(Shell), umarni masu gudana tare da ma'anar Python mara inganci, da gyaran kwaro.

source: www.habr.com

Add a comment