Programowanie w powłoce jest fajne. Ale to samo dotyczy Pythona. Ludzie z doświadczeniem C lub, co najważniejsze, osoby korzystające z systemu Windows nie zgodzą się. Ludzie często wolą korzystać z interfejsu graficznego niż z wiersza poleceń. Ale to jest całkowicie błędne. Graficzny interfejs użytkownika jest przeznaczony dla osób, które uważają, że oprogramowanie robi to, co mówi jego opis. Ale nie zawsze tak jest. Zwłaszcza w przypadku okien programowania powłoki, w których wirusy i złośliwe oprogramowanie spowodowały spustoszenie wielkości Tornado. Tak więc ludzie używający interfejsu wiersza poleceń zwykle zgadzają się, że to, co robią, jest właściwe, a ja zgadzam się z nimi, że mają rację.

Wiele razy zwykle utknąłeś, a cały komputer zawiesił się dzięki prostemu oprogramowaniu opartemu na interfejsie graficznym. Praca nad interfejsem wiersza poleceń jest często bardziej elegancka, szybka i, co najważniejsze, wiesz, co wykonujesz. Ale znowu, używanie powłok i pisanie programów nie jest czymś, co każdy wolałby robić.

Poza tym pisanie programów w C lub Javie byłoby znacznie gorsze niż używanie oprogramowania opartego na graficznym interfejsie użytkownika w systemie Windows. Nie przeklinam tutaj C ani Javy, po prostu nie nadają się do codziennego użytku. I tutaj przodują języki skryptowe, takie jak programowanie Shell i języki Python. Tak więc dzisiaj toczymy wojnę, która jest bardziej odpowiednia do mniejszych i większych zastosowań. A może rzeczywiście możemy połączyć je obie i stworzyć z nich coś nowego i lepszego. Przyjrzyjmy się im obu i zobaczmy, dokąd nas to zaprowadzi.

Skrypty powłoki Bash

Skrypty powłoki są naprawdę niesamowite. Możesz prawie wykonać większość swoich zadań w jednym wierszu kodu. Na przykład, weź ten fragment kodu: -

$ touch plik.txt | echo -e 'hello \ n Nowy \ n Świat \ n hello \ n Cześć >> file.txt | plik cat.txt | sortuj | uniq | wc -l

Jak widać, dzieje się tutaj wiele skryptów powłoki, ale co się właściwie dzieje? Najpierw „| „jest znany jako rura. Służy do przesyłania danych wyjściowych z jednego pliku do drugiego. Składnia „dotykowa” służy do tworzenia dowolnego pliku, a składnia echa służy do drukowania dowolnej instrukcji. Podwójne strzałki po prawej stronie „>>” służą do wstawiania danych wyjściowych do dowolnego pliku lub programu. Składnia „cat” jest używana do odczytu zawartości pliku. Sortuj służy do sortowania wszystkiego w kolejności, a „uniq” służy do usuwania duplikatów z sortowania. „Wc” służy do zliczania linii, a -l jest tylko flagą do ich wydrukowania. Więc wszystkie te powiązane polecenia wykonują następujące czynności.

  1. Najpierw tworzony jest plik z nazwą pliku z rozszerzeniem txt, aby poinformować, że jest to plik tekstowy.
  2. Po drugie, echo -e służy do drukowania wielu słów w pliku file.txt, a „slash n” lub „\ n” służy do wprowadzania nowej linii lub przejścia do następnego wiersza.
  3. Po wprowadzeniu ciągów do pliku, plik jest odczytywany, sortowany w kolejności i przesyłany do składni uniq w celu usunięcia wszelkich istniejących duplikatów, w tym przypadku w naszym przypadku jest to „hello”.
  4. Na koniec drukujemy liczbę wierszy za pomocą „wc -l”, aby policzyć i drukujemy ją na ekranie terminala.

Tak więc, chociaż powyższy jest tylko jednym wierszem kodu, może się komplikować, gdy wstawi się więcej warunków. Dlatego skrypty powłoki są dobre, ale nie można ich używać do wykonywania nowych zadań przez cały czas. Czasami chcesz, aby rzeczy były prostsze, tak proste jak graficzny interfejs użytkownika. Skrypty powłoki są w rzeczywistości bardzo dobre do uruchamiania skryptów wsadowych i wykonywania powtarzających się zadań, ale jednocześnie mają pewne wady:

  1. Skrypty powłoki stają się bardzo skomplikowane, gdy stają się duże.
  2. Ponowne użycie skryptu jest prawie zerowe. Chodzi mi tutaj o to, że skrypty bash są niezwykle trudne do wstawienia w C lub innych kodach Java.
  3. Zaawansowane funkcje, takie jak parsowanie HTML, nie są łatwo dostępne do bash.

Istnieje jednak Python do ratowania i najbardziej odpowiedni zamiennik tego samego. Ale czy skrypty Bash Shell są całkowicie wymienne? Spójrzmy.

Polecane kursy

  • Szkolenie certyfikacyjne online w zakresie kompleksowego J2EE
  • Profesjonalne szkolenie z zakresu programowania R.
  • Szkolenie certyfikacyjne online w programowaniu Go
  • Szkolenie z programu Haskell

Skrypty powłoki w języku Python

Python jest instalowany domyślnie na prawie wszystkich systemach Linux i UNIX. Czasami dystrybucja może mieć starszą wersję, ale można ją zaktualizować za pomocą prostego polecenia. Programowanie w języku Python Shell jest znacznie łatwiejsze do zrozumienia i łatwiejsze do napisania nawet dla początkujących. Ponadto domyślnie Python ma styl Read Eval Print Loop, który pomaga w wypróbowywaniu nowych kodów w interpretatorze. Ale samo użycie Pythona może być nieco trudne bez pomocy skryptów powłoki bash. Poza tym w naszym poprzednim programie z jedną linią użyliśmy składni „uniq” do usunięcia duplikatów, ale nie pokazało nam to, jakie były duplikaty. Napiszmy więc program python, aby zrobił to samo:

#! / usr / bin / env pythonimport sys # importowanie modułów systemowych do pracy z plikami katalogów, jeśli __nazwa__ == „__main __”: # Rozpocznij od pustego słownika tutaj. Który jest określany jako kolejność # Wszystkie klucze w tym słowniku pojawiają się jako nazwa, a określone dla nich wartości # będą liczbą wyświetleń określonej nazwy. Zamówienie = () # sys.stdin jest obiektem używanym do plików. Wszystkie te funkcje, które są stosowane

# obiekt pliku może być również użyty dla sys.stdin.

na zamówienie w sys.stdin.readlines ():

order = order.strip ()

jeśli zamówienie w zamówieniach:

zamówienia (zamówienie) + = 1

jeszcze:

zamówienia (zamówienie) = 1

dla zamówienia policz w zamowienia.iteritems ():

sys.stdout.write („% d \ t% s \ n”% (liczba, kolejność))

Teraz ten plik najpierw odczytuje dane wejściowe z obiektu sys.stdin. Wszystkie dane wyjściowe są zapisywane w obiekcie sys.stdout. Po utworzeniu tego skryptu, zakładając, że nadałeś mu nazwę order.py, możesz po prostu wykonać następujący skrypt powłoki w terminalu, a zobaczysz całkowitą liczbę wszystkich zduplikowanych ciągów.

$ cat file.txt | python order.py

Podobnie możemy to rozwiązać, używając składni th sort: -

$ cat file.txt | python order.py | sortuj -rn

Python Shell vs Bash Shell Programowanie skryptów

Teraz widzieliśmy, jak możemy łączyć skrypty Pythona i powłoki, aby utworzyć łańcuch poleceń i wykonać je razem. Przejdźmy teraz o krok dalej i zobaczmy, czy Python może całkowicie zastąpić Bash Shell.

Mówiąc o programowaniu powłoki bash, pod względem wydajności, bash całkowicie bije bzdury z Pythona. Ale jeśli porównasz to z typami danych i innymi zaawansowanymi rzeczami, bash nie ma dużej kompatybilności. Czas uruchamiania skryptu powłoki bash wynosi 2, 8 miliarda sekund, podczas gdy dla Pythona 11, 1 miliarda sekund. Mówiąc szczerze, bash jest językiem ogólnego przeznaczenia, podobnie jak Python, ale oba mają swoje mocne i słabe strony. Programowanie powłoki Bash jest domyślnym terminalem w większości dystrybucji Linuksa i dlatego zawsze będzie szybsze pod względem wydajności. Ale czy to oznacza, że ​​może całkowicie zastąpić Pythona? Nie. Podczas pracy z dużymi programami Bash będzie się komplikował, podczas gdy Python nie. O ile wiem, Python może być również używany jako język obiektowy. Jeśli jesteś dopiero początkujący, możesz nawet nie znać różnicy między nimi. Python to najbardziej elegancki język skryptowy, nawet bardziej niż Ruby i Perl. Z drugiej strony programowanie powłoki Bash jest naprawdę bardzo dobre w przekazywaniu wyników jednego polecenia do drugiego.

Skrypty powłoki są proste i nie są tak potężne jak Python. Nie radzi sobie z frameworkami i ciężko jest zacząć korzystać z programów związanych z siecią za pomocą Shell Scripting. Prawdziwa moc skryptowania powłoki leży w edytorze Stream Text lub sed, programach Awk i podobnych aplikacjach.

Obsługa plików i tworzenie aplikacji internetowych

Skrypty powłoki Bash działają bezbłędnie i szybko podczas pracy z plikami. Przez obsługę plików mam na myśli kopiowanie, klonowanie dysków, pisanie aplikacji do tworzenia kopii zapasowych dla sieci, serwerów ftp, przechowywanie danych wejściowych plików i uzyskiwanie do nich dostępu później, a następnie przesyłanie tych danych wyjściowych do czegoś innego za pomocą potoku. Z drugiej strony Python jest bardziej przydatny w przypadku porcji danych, takich jak odczyt danych z pliku i przetwarzanie danych. Mówiąc dokładniej, bash nie jest nawet językiem programowania. To bardziej prosta powłoka, której celem było radzenie sobie z plikami systemowymi za pomocą wiersza poleceń, aby proces był szybszy i szybszy.

Zatem jeśli dobrze znasz programowanie powłoki bash, to wiesz również, że zmienne i zakresy w bash są bardzo ograniczone. Z drugiej strony Python jest bardziej językiem skryptowym powłoki niż językiem programowania. Jeśli określimy Bash jako język programowania, to bardziej przypomina to, że Python jest językiem programowania powłoki obiektowej. Z Pythonem można sobie poradzić w sposób obiektowy, ale nigdy nie będzie on zorientowany obiektowo, jak C lub Java. Podobnie Bash jest językiem skryptowym; lepiej jest go używać jako czegoś, co jest wymagane do szybkiego radzenia sobie z plikami niż do pisania dużych programów. Ponadto, chociaż Python jest językiem skryptowym powłoki, faktycznie zajmuje się własną powłoką. Na przykład przeniesienie całego pliku znajdującego się na pulpicie do innego losowego katalogu za pomocą powłoki Bash wyglądałoby mniej więcej tak:

$ cd Desktop $ mv * randomDirectory

Ale z drugiej strony robienie tego samego w Pythonie jest nieco bardziej skomplikowane. Wygląda to mniej więcej tak:

importuj os, glob dla fname w glob.glob ('*'): os.rename (fname, 'randomdirectory')

W najlepszym razie można uczynić go najbardziej kompaktowym w ten sposób:

importuj os, glob (os.rename (fname, 'randomdirectory') dla fname w glob.glob ('*'))

Ucząc się dowolnego języka, ludzie często mówią ci, jak wyczyścić podstawy i wszystkie te rzeczy, ale nie powiedzą, jak najpierw zająć się samym systemem, co jest najważniejsze. Poza tym zarówno Python, jak i Bash są językiem skryptowym Shell, co oznacza, że ​​oba zostały opracowane głównie z myślą o systemie i jego plikach.

Bash w Pythonie?

Tak, dobrze to przeczytałeś. Do tej pory czytaliśmy o tym, jak możemy wprowadzić skrypty Pythona w Shell. Ale możemy również wprowadzić skrypty powłoki w skryptach Pythona. Weźmy na przykład: - Wpisz „apt-get update” w powłoce pytona? Oczywiście wystąpi błąd, taki jak nieprawidłowa składnia. Chodzi o to, że jeśli chcesz używać kodów bash, takich jak „ls, cd, mv” lub cokolwiek innego w pythonie, musisz zaimportować moduł systemu operacyjnego. Teraz zrób jedną rzecz, skopiuj następujący kod i wklej go do powłoki Pythona i sprawdź, jak to działa: -

$ python >>> z systemu operacyjnego import * *> ('sudo apt-get update')

A teraz działa… tak. Jest to kolejny sposób na to, jak skrypty python i bash współpracują ze sobą. Poza tym istnieje inny moduł Pythona, który został zbudowany specjalnie do pracy z bash. Ten moduł jest znany jako pexpect. Pexpect to moduł python, który służy do odradzania procesów potomnych, kontrolowania ich i zwracania wyników zgodnie z żądaniem procesu potomnego. Moduł pexpect ma niezwykle łatwy interfejs do importowania wymaganych modułów i procesów potomnych i wykonywania ich odpowiednio. Wystarczy zainstalować pip w systemie, aby zainstalować pexpect, a moduł można zainstalować w następujący sposób:

$ pip install pexpect

Wersja Pexpect wymaga wersji Pythona wyższej niż 3.3, a konkretnie 2.7.

W rzeczywistości mieszanie Pythona i Bash jest o wiele więcej i nic nie działa tak dobrze, jak połączenie skryptu Python i Bash. Ta mieszanka sprawia, że ​​skrypt jest szybki dzięki Bash i zawiera zaawansowane funkcje dzięki Pythonowi. O pexpect i jego dokumentacji można przeczytać na https://pexpect.readthedocs.org/online.

Polecane artykuły

Oto kilka artykułów, które pomogą ci uzyskać więcej szczegółów na temat skryptów Bash i Pythona, więc po prostu przejdź przez link.

  1. Różnice cenne w języku Python a JavaScript
  2. 25 najlepszych niesamowitych pytań i odpowiedzi podczas wywiadu w języku Python
  3. Różnice między Python a JavaScript
  4. Programowanie R a Python
  5. Obsługa plików PHP