Kuidas asendada Bash Pythoniga kui käsurea keelega

Mul on bashiga natuke armu- ja vihkamise suhe. Ma veedan palju aega terminalis ja bash on minu vaikimisi "programmeerimiskeel". Mõnikord ütlen inimestele, et leidmine, grep ja xargs haldavad nende infrastruktuuri, ja nad naeravad ja naeravad, kuni saavad aru, et olen tõsine.

Mõne Pythoni kätte saamine on süsteemiadministraatoritele ideaalne valik. See on suurepärane ka kõigile, kes peavad terminalis millegagi tegelema, kuid ei soovi bashi kasutada või kellel on bashi jaoks liiga keerulised vajadused. Kui ülesanne läheb kaugemale

find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"

on aeg Python lahti murda!

Pythoni kasutamisel käsurea keelena on palju eeliseid.

  • Pythonis on palju toredaid raamatukogusid, mis aitavad peaaegu kõike. See hõlmab süsteemitoimingutega tegelemist, failide lugemist, kataloogide loetlemist, silmuste jaoks kirjutamist, väljumiskoodide kontrollimist ja nii edasi.
  • Automaatne täitmine IDE-dega. Tõsiselt. Kes tahab, et peaks midagi pähe õppima?
  • Tugev testimiskomplekt, kui see on teie asi (ja kui see pole nii, siis peaksite kaaluma selle muutmist enda jaoks).
  • IPythoni konsool. See on imeline. See on hämmastav. MA ARMASTAN SEDA.
  • Python on saadaval enamikus süsteemides ja kui seda pole, saate selle hankida Minicondaga.
  • Tugev vigade kontroll proovimis- ja püüdmisplokkidega
  • Kui töötate erinevate opsüsteemidega, võite kasutada Pythoni teeke, mis tegelevad kõigega, mis kapoti all on.
  • Isegi kui teil pole programmeerimisvõimalusi, on Python alustamiseks lihtne keel.

Alustame

Alustamiseks peate kõigepealt installima Pythoni või installima selle koos Minicondaga.

Kontrollige, kas teil on installitud iPython

which python which ipython 

Kui mõlemad need on edukad, tegelete äriga! Kui teil on Python, kuid mitte iPython, peate selle installima. Võite selle installida süsteemipaketina, kuid ma tõesti soovitan teil lihtsalt installida see koos Minicondaga.

Installige Miniconda

Haarake siin oma OS-i installer. Soovitan hankida Python3 install.

Siis on see lihtsalt lihtne install.

bash Miniconda3-latest-Linux-x86_64.sh 

Järgige juhiseid ja installite Miniconda3. Kui olete selle installinud, soovite käivitada värskenduse, sest see on tehnoloogia ja muidugi soovite värskenduse käivitada. ;-)

conda update conda conda config --add channels conda-forge conda update -y --all conda install -y ipython 

Tõrkeotsing

Kui teil on probleeme mõne paketi installimisega, on siin mõned näpunäited.

  • Jookse conda clean --allja proovige uuesti.
  • Veenduge, et kasutate õiget kanalit.
  • Jookse conda update -y --all
  • Proovige võimalikult vähe oma globaalsesse korteriruumi installida. Selle asemel looge keskkond erinevate ülesannete ja projektide jaoks, millesse me järgnevalt jõuame.

Looge Condaga keskkondi

Kui olete kunagi kasutanud virtualenv, pipenv (kas see on asi?), Rbenv, plenv, anyenv või mõnda muud aastate jooksul esile kerkinud erinevat env-d, kõlab see teile väga tuttavalt. Idee on selles, et erinevatel projektidel peaks olema oma eraldatud tarkvarakeskkond.

conda create -n my-project ipython package1 package2 package2 

Kui olete nagu mina ja soovite, et iPython oleks hõlpsasti saadaval, installige see kindlasti kõikidesse uutesse keskkondadesse!

Pythoni raamatukogud süsteemi haldamiseks

Enne näidetesse jõudmist loetlegem lihtsalt mõned käepärased paketid koos nende dokumentidega.

Minu mine paketti on os-pakett. Saate seda kasutada kataloogide loetlemiseks, failide olemasolu kontrollimiseks, sümbolilinkide olemasolu kontrollimiseks, kataloogide loomiseks, süsteemi käskude käivitamiseks, keskkonnamuutujate hankimiseks ja määramiseks ning muuks. See on suurepärane!

Minu teine ​​pakett käskude käitamiseks, mida pole käepäraste pythoni teekidena olemas, on alamprotsessi moodul.

Sulgel on failitoimingud, mis pole os-teegis.

Pprindi teek prindib välja keerukad andestruktuurid kena taandega.

Pytest-teek lubame teil Pythoni koodi testida, sest olgem ausad, esimene (paar) korda ei tööta kunagi mitte miski õigesti.

Kuidas ma oma koodi täidan?

Lõpuks ometi! Kood!

Ekraanipilt-2019-12-13-10.33.52

Kui kasutate süsteemi haldamiseks Pythoni, saate sukelduda otse iPythoni konsooli või kirjutada skripte ja seejärel neid käivitada python name-of-script.py.

Kui eelistate skripte kirjutada, on teil nii palju valikuid ja see on tõesti isikliku eelistuse küsimus. Ma kasutan tasulist PyCarmit, kuid Visual Studio Code ja Atom on võrdselt suurepärased tasuta valikud.

Leian, et see sõltub sellest, millega tegelen. Mõnikord avan lihtsalt iPythoni konsooli ja hakkan trükkima ning teinekord vajan testide ja muuga midagi jõulisemat.

Kui kasutate kas iPythoni konsooli või mõnda ülaltoodud redaktorit, on teil automaatne täitmine. Automaatne täitmine on vinge! IPythoniga alustage lihtsalt oma funktsiooni tippimist ja vajutage tabeldusklahvi, et saada võimalike funktsioonide loend.

Ekraanipilt-2019-12-13-10.49.07

Ma ei saa väljendada, kui väga ma armastan automaatse täitmise funktsiooni. ;-)

Hankige abi

Võite minna mis tahes teegi mis tahes doc-lehele, kuid kui teate kas teegi nime või funktsiooni, saate selle iPythonis esile tuua.

Ekraanipilt-2019-12-13-10.55.14

Ekraanipilt-2019-12-13-10.55.55

You can bring up the help menu in most IDEs and text editors too, but that will be specific to your editor.

Examples

First you will need to import your packages

import os import subprocess import shutil from pprint import pprint 

Here are some examples of common file and directory operations.

# Get your current working directly # This returns a string my_cwd = os.getcwd() print(my_cwd) 
# List the contents of a directory # This returns a list dir_list = os.listdir() for item in dir_list: print(item) 
# Get the Absolute Path name of a file (file + current working dir) os.path.abspath('some-file') 
#Get the basename - returns file os.path.basename('/path/to/file') 
# Split a directory path - platform independent os.path.split(os.getcwd()) # Out[17]: ('/Users', 'jillian') 
# Check if a path exists os.path.exists('/path/on/filesystem') 
# Check if a path is a symlink os.path.islink() 

Move files and directories around

# Copy a directory # cp -rf shutil.copytree('src', 'dest') 
# Copy a file # cp -rf shutil.copyfile('file1', 'file2') 
# Move a directory # mv shutil.move('src', 'dest') 

Not everything is going to be available through python libraries, such as installing system libraries, so run a few system commands!

# Run an arbitrary system command command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) #Print the stdout and stderr print(result.stdout) print(result.stderr) 

Write to files!

# Write to a file (and create it if it doesn't exist) # echo "hello" > hello.txt f= open("hello.txt","w+") f.write("hello!") f.close() 
# Append to a file # echo "hello" >> hello.txt f = open("hello.txt", "a+") f.write("hello again!") f.close() 

Write some tests!

Tests mostly work by using a function called assert, which is essentially saying make sure this is true and if not die loudly.

def test_system_command(): """Test the exit code of a system command""" command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE) assert result.returncode == 0 

Put this function in a file called test_my_code.py and run as pytest test_my_code.py.

Wrap Up

That's it for my main tips and tricks for using Python as your go-to bash replacement. The next time you need to write a loop in bash, consider breaking out the iPython console and seeing what you can come up with instead!