Python-ի և Bash-ի բարեկամության ստեղծում. python-shell և smart-env v գրադարանների թողարկում: 1.0.1

Բարի օր բոլորին!

Փետրվարի 29 2020 տարի տեղի ունեցավ գրադարանների պաշտոնական միկրոթողարկում smart-env и python-shell. Նրանց համար, ովքեր տեղյակ չեն, առաջարկում եմ նախ կարդալ այն առաջին գրառումը.

Մի խոսքով, փոփոխությունները ներառում են հրամանների լրացում, հրամանների գործարկման ընդլայնված հնարավորություններ, որոշ վերամշակում և սխալների շտկում:

Մանրամասների համար տես կատ.

Ի՞նչ նորություն կա python-shell-ում:

Ես անմիջապես կսկսեմ դեսերտից:

Հրամանի ավարտ

Համաձայն եք. հարմար է, երբ խմբագրիչը/IDE/տերմինալը ձեզ հուշում է հրամանի անունը, իսկ երբեմն նույնիսկ զանգի պարամետրերը: Այսպիսով, python-shell-ը աստիճանաբար առաջընթաց է գրանցում նմանատիպ ֆունկցիոնալության ապահովման հարցում: Հաշվի առնելով այն հանգամանքը, որ գլխարկի տակ գտնվող Shell դասի դաշտերը դե-ֆակտո ոչ թե նրա դաշտերն են (համատարած __getattr__), ինքնալրացումը նույնպես ստեղծվել է զրոյից (համապատասխանաբար՝ __dir__ մեթոդը ծանրաբեռնելով): Ավտոլրացումն այժմ աշխատում է BPython և IPython միջավայրերում: Իհարկե, ես կցանկանայի տեսնել PyCharm-ի նման ավելի հարգված ապրանքների հետ ինտեգրում, և այս ուղղությամբ ուսումնասիրվում են իրականացման հնարավորությունները:

Հատկությունների ավելացում

Որպես թողարկման մաս, Shell դասը ստացավ նոր last_command հատկություն: Դրա անհրաժեշտությունը ծագեց, քանի որ երբ ShellException-ը նետվում էր ոչ զրոյական վերադարձի կոդով հրամանով, Command օբյեկտը չէր վերադարձվում __call__() կանչից դեպի հրամանի օբյեկտ: Այժմ հնարավորություն կա անելու սա.

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

Ընդլայնվել է նաև Command օբյեկտի հատկությունների ցանկը։ Ավելացվեց սխալների դաշտ, որը վերադարձնում է հրամանի ելքը սխալի հոսքին:

Անվավեր Python անուններով հրամանների գործարկում

Գրեթե յուրաքանչյուր համակարգ ունի առնվազն մեկ ծրագիր, որի անունը հարմար չէ որպես նույնացուցիչ Python-ում (օրինակ՝ հայտնի 2to3 կոմունալ ծրագիրը): Զանգահարեք նրան

Shell.2to3()

Եթե ​​դա չի աշխատում, թարգմանիչը թույլ չի տա այն անցնել:
Լուծումն այն է, որ զանգահարեք հրամանը շրջանաձև ձևով.

Shell("2to3")  # возвращает объект команды

Հարկ է նշել, որ նույն կերպ դուք կարող եք գործարկել հրամաններ, որոնք վավեր են թարգմանչի տեսանկյունից, ինչը հնարավորություն է տալիս ստեղծելու ճկուն սցենարներ, ինչպիսիք են.

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

Փոքր փոփոխություններ

  • Իրականացվել են Command դասի օբյեկտի __repr__() և __str__() մեթոդները, որոնք այժմ արտադրում են ինտուիտիվ արժեքներ (համապատասխանաբար պարամետրերով հրաման և դրա stdout ելքը):
  • Կոդի փոքր ուղղումներ:
  • Թեստային ծածկույթի ավելացում, ինչպես նաև գոյություն ունեցողների վերակազմավորում:
  • Subprocess և Process դասերի ավելացում, որի նպատակը ենթապրոցեսի մոդուլի հետ աշխատելիս վերացականության լրացուցիչ մակարդակ ստեղծելն է։ Հիմնականում անհրաժեշտ է կոդերի կրկնօրինակումը վերացնելու համար Python 2/3-ի հետ աշխատելիս, բայց կարող է նաև այլ բոնուսներ տրամադրել:

Ի՞նչ նորություն կա smart-env-ում:

Ի տարբերություն python-shell-ի, smart-env գրադարանում ավելի քիչ փոփոխություններ են եղել: Սրա պատճառը պարզ է՝ ազատ ժամանակի բացակայություն, որի ընթացքում որոշ պոտենցիալ բարելավումներ (օրինակ՝ միջավայրի փոփոխականների ավտոմատ լրացում) տեղափոխվեցին հաջորդ թողարկում։

Փաստորեն, գրադարանում կատարվել են հետևյալ փոփոխությունները.

  • Կոդի փոքր ուղղումներ:
  • Refactoring.
  • Գոյություն ունեցող թեստերի վերակազմավորում և ճշգրտում:

Ծրագրեր հաջորդ թողարկումների համար

python-shell գրադարան

  • Չարգելափակող հրամանների զանգերի աջակցության ավելացում (կատարման զուգահեռացում):

smart-env գրադարան

  • ENV դասում շրջակա միջավայրի փոփոխականների ավտոմատ լրացման իրականացում:
  • Աջակցություն in օպերատորին՝ env փոփոխականի առկայությունը ստուգելու համար:
  • ENV դասի համար str() և repr() ֆունկցիաների աջակցության իրականացում:

Հաջորդ թողարկումների ժամկետները կհայտարարվեն հետևյալ հաղորդակցման ուղիներով.

Source: www.habr.com

Добавить комментарий