Farante Python kaj Bash Friendship: Liberigo de la bibliotekoj python-shell kaj smart-env v. 1.0.1

Bonan tagon al ĉiuj!

29 Februaro 2020 jaroj oficiala mikroeldono de bibliotekoj okazis smart-env и python-ŝelo. Por tiuj, kiuj ne scias, mi sugestas, ke vi unue legu ĝin unua afiŝo.

Resume, la ŝanĝoj inkluzivas komandkompletigon, pligrandigitajn kapablojn por ruli komandojn, iujn refaktoradon kaj cimojn.

Por detaloj bonvolu vidi kat.

Kio estas nova en python-shell?

Mi tuj komencos kun deserto.

Kompletigo de komando

Konsentas - ĉu estas oportune kiam la redaktilo/IDE/terminalo petas vin pri la nomo de la komando, kaj foje eĉ la alvokaj parametroj? Do python-shell iom post iom progresas en havigi similan funkciecon. Pro la fakto ke la kampoj de la Shell-klaso sub la kapuĉo estas fakte ne ĝiaj kampoj (la ĉiea __getattr__), aŭtokompletigo ankaŭ estis kreita de nulo (per troŝarĝado de la __dir__ metodo, respektive). Aŭtomata kompletigo nuntempe funkcias en BPython kaj IPython-medioj. Kompreneble, mi ŝatus vidi integriĝon kun pli respektindaj produktoj kiel PyCharm, kaj efektivigeblecoj estas studataj tiudirekte.

Aldonante proprietojn

Kiel parto de la eldono, la Shell-klaso ricevis novan last_command-posedaĵon. La bezono de ĝi estiĝis ĉar kiam ShellException estis ĵetita per komando kun ne-nula revenkodo, la Command-objekto ne estis resendita de la __call__() alvoko al la komanda objekto. Nun estas ŝanco fari ĉi tion:

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

La listo de propraĵoj de la Command-objekto ankaŭ vastiĝis. Aldonis erarkampon, kiu resendas la komandan eligon al la erara fluo.

Rulante komandojn kun nevalidaj Python-nomoj

Preskaŭ ĉiu sistemo havas almenaŭ unu programon, kies nomo ne taŭgas kiel identigilo en Python (ekzemple, la konata ilo 2to3). Voku ŝin kun

Shell.2to3()

Se ĝi ne funkcias, la interpretisto ne lasos ĝin trairi.
La solvo estas voki la komandon laŭ ronda maniero:

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

Indas noti, ke same vi povas ruli ordonojn, kiuj validas el la vidpunkto de la interpretisto, kio lasas la ŝancon krei flekseblajn skriptojn kiel

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

Malgrandaj ŝanĝoj

  • La __repr__() kaj __str__() metodoj de la komanda klasobjekto estis efektivigitaj, kiuj nun produktas intuiciajn valorojn (komando kun parametroj kaj ĝia stdout eligo, respektive).
  • Malgrandaj kodaj korektoj.
  • Aldonante testan kovradon, kaj ankaŭ reorganizi ekzistantajn.
  • Aldonante la Subprocess kaj Process klasoj, kies celo estas krei plian nivelon de abstraktado kiam laboras kun la subproceza modulo. Plejparte bezonata por forigi kodan duobligon kiam vi laboras kun Python 2/3, sed eble ankaŭ povas provizi aliajn gratifikojn.

Kio estas nova en smart-env?

Male al python-shell, estis malpli da ŝanĝoj en la biblioteko smart-env. La kialo de tio estas simpla - manko de libera tempo, dum kiu iuj eblaj plibonigoj (ekzemple, aŭtomata kompletigo de mediaj variabloj) estis movitaj al la sekva eldono.

Fakte, la sekvaj ŝanĝoj estis faritaj al la biblioteko:

  • Malgrandaj kodaj korektoj.
  • Refaktorado.
  • Reorganizado kaj rafinado de ekzistantaj testoj.

Planoj por venontaj eldonoj

python-shell biblioteko

  • Aldonante subtenon por ne-blokaj komandvokoj (paraleligo de ekzekuto).

smart-env biblioteko

  • Efektivigo de aŭtokompletigo de mediovariabloj en la ENV-klaso.
  • Subteno por la operatoro in por kontroli la ekziston de env-variablo.
  • Efektivigo de subteno por la funkcioj str() kaj repr() por la ENV-klaso.

La datoj de la venontaj eldonoj estos plu anoncitaj en la sekvaj komunikaj kanaloj:

fonto: www.habr.com

Aldoni komenton