Hogyan cseréljük le a Bash-et Python-ra mint a parancssor nyelvét

Van egy kis szeretet és gyűlölet kapcsolatom bash-val. Sok időt töltök a terminálban, és a bash az alapértelmezett "programozási nyelvem". Néha azt mondom az embereknek, hogy a find, a grep és az xargs működtetik az infrastruktúrájukat, és nevetnek és nevetnek, amíg rájönnek, hogy komolyan gondolom.

Néhány Python felvétele tökéletes választás a rendszergazdák számára. Nagyszerű azoknak is, akiknek bármivel is foglalkozniuk kell egy terminálban, de nem akarják használni a bash-t, vagy olyan igényeik vannak, amelyek túl összetettek a bash számára. Miután egy feladat túlmutat

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

itt az ideje, hogy kitörjön a Python!

Nagyon sok előnye van annak, ha a Python-ot parancssoros nyelvként használja.

  • A Python rengeteg szép könyvtárral rendelkezik, amelyek szinte mindenhez segítséget nyújtanak. Ez magában foglalja a rendszer műveleteinek kezelését, a fájlok olvasását, a könyvtárak felsorolását, a hurkokba írást, a kilépési kódok ellenőrzését és így tovább.
  • Automatikus kiegészítés IDE-kkel. Komolyan. Ki akar bármit megjegyezni?
  • Robusztus tesztkészlet, ha ez a te dolgod (és ha nem, akkor fontold meg, hogy a dolgod legyen).
  • Az iPython konzol. Ez csodálatos. Ez elképesztő. SZERETEM.
  • A Python elérhető a legtöbb rendszeren, és ha nem, akkor a Minicondával megszerezheti.
  • Robusztus hibaellenőrzés blokkokkal.
  • Ha különböző operációs rendszereken dolgozik, használhat Python könyvtárakat, amelyek mindezekkel a motorháztető alatt foglalkoznak.
  • Még akkor is, ha nincs programozási képessége, a Python könnyen kezelhető nyelv.

Kezdjük el

A kezdéshez először is telepítenie kell a Pythont, vagy telepítenie kell a Minicondával.

Ellenőrizze, hogy telepítve van-e az iPython

which python which ipython 

Ha mindkettő sikeres, akkor üzleti tevékenységet folytat! Ha van Python, de nem iPython, akkor telepítenie kell. Telepítheti rendszercsomagként, de nagyon ajánlom, hogy csak a Minicondával telepítse.

Telepítse a Minicondát

Fogja itt az operációs rendszer telepítőjét. Javaslom a Python3 telepítés beszerzését.

Akkor ez csak egy egyszerű telepítés.

bash Miniconda3-latest-Linux-x86_64.sh 

Kövesse az utasításokat, és telepíti a Miniconda3 szoftvert. Miután telepítette, frissítést kell futtatnia, mert ez technikai jellegű, és természetesen futtatni is szeretne. ;-)

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

Hibaelhárítás

Ha néhány csomag telepítésével gondjai vannak, íme néhány tipp.

  • Fuss conda clean --allés próbáld újra.
  • Győződjön meg róla, hogy a megfelelő csatornát használja.
  • Fuss conda update -y --all
  • Próbálja meg a lehető legkevesebbet telepíteni a globális társasházba. Ehelyett olyan környezeteket kell létrehozni a különböző feladatokhoz és projektekhez, amelyekbe a következőkben belemegyünk.

Környezetek létrehozása a Conda segítségével

Ha valaha is használta a virtualenv-t, a pipenv-t (ez egy dolog?), Az Rbenv-t, a plenv-t, az anyenv-t vagy bármely más, az évek során felbukkant különféle env-t, ez nagyon ismerősnek tűnik. Az elképzelés az, hogy a különböző projekteknek saját, elszigetelt szoftverkörnyezettel kell rendelkezniük.

conda create -n my-project ipython package1 package2 package2 

Ha olyan vagy, mint én, és szeretné, ha az iPython azonnal rendelkezésre állna, győződjön meg róla, hogy minden új környezetbe telepítette!

Python könyvtárak a rendszeradminisztrációhoz

Mielőtt belemerülnénk a példákba, csak soroljunk fel néhány hasznos csomagot a dokumentumaikkal együtt.

A go to package az os csomag. Használhatja könyvtárak felsorolására, fájlok létezésének ellenőrzésére, szimlinkek létezésére, könyvtárak készítésére, rendszerparancsok futtatására, környezeti változók beolvasására és beállítására stb. Ez nagyszerű!

A második csomagom olyan rendszerparancsok futtatásához, amelyek nem léteznek praktikus python könyvtáraként, az alfolyamat modul.

A shutil olyan fájlműveletekkel rendelkezik, amelyek nincsenek az os könyvtárban.

A pprint könyvtár bonyolult adatstruktúrákat nyomtat szép behúzással.

A pytest könyvtár segítségével teszteljük a Python-kódot, mert valljuk be, soha semmi sem működik megfelelően az első (néhány) alkalommal.

Hogyan tudom végrehajtani a kódomat?

Végül! Kód!

Pillanatkép-2019-12-13-10.33.52

Amikor a Python-ot használja a rendszeradminisztrációhoz, merülhet egyenesen az iPython konzolba, vagy írhat parancsfájlokat, majd futtathatja azokat python name-of-script.py.

Ha inkább a szkripteket írja, akkor sok választási lehetősége van, és ez valóban személyes preferenciák kérdése. A fizetős PyCharmot használom, de a Visual Studio Code és az Atom egyaránt kiváló ingyenes választás.

Úgy látom, hogy ez attól függ, min dolgozom. Néha csak kinyitom az iPython konzolt, és elkezdek gépelni, máskor pedig valami erőteljesebbre van szükségem tesztekkel és mi mással.

Ha az iPython konzolt vagy a fent felsorolt ​​szerkesztők bármelyikét használja, akkor automatikusan kitölti. Az automatikus kiegészítés fantasztikus! Az iPython használatával egyszerűen kezdje el beírni a függvényét, és nyomja meg a Tab billentyűt a szükséges funkciók listájának megszerzéséhez.

Pillanatkép-2019-12-13-10.49.07

Nem tudom kifejezni, mennyire szeretem az automatikus kiegészítést. ;-)

Kaphat segítséget

Bármelyik könyvtár bármelyik doc oldalára eljuthat, de ha ismeri a könyvtár nevét vagy a függvényt, akkor felhozhatja azt az iPythonban.

Pillanatkép-2019-12-13-10.55.14

Pillanatkép-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!