Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #32 - 20 czerwiec 2018, 18:00, Białystok
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Menu skrypt - alternatywa do argparse nie wymagająca instalacji, dla Linuksa  (Przeczytany 519 razy)
« : 08:57 27/02/18 »
TomekW Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 2


Cześć,

Miło was powitać na forum, jestem nowy.
Trochę już piszę w Pythonie, na ile OK - nie wiem, bo nie miałem tego jak zweryfikować.
Przejdę do rzeczy skryptu.

Skrypt jest przeznaczony dla osób piszących skrypty pod Shella Linuksowego. W moim przypadku BASH lub KSH (Sys Adminów, App. Adminów, w moim przypadku skrypt służy mi jako wyjściówka pod skrypty do pracy na Solarisie)

Etymologia skryptu:
Pisząc różne skrypt pod własny użytek jako admin aplikacji, za każdym razem musiałem się uporać z pewną zmorą. Skrypt każdy może mieć wiele poszczególnych funkcji. Każda funkcja może brać argument dodatkowy, mieć zbiór potencjalnych sub argumentów, wymagane i nie wymagane dodatkowe subargumenty. Pisanie zależności za każdym razem jest upierdliwe. Możliwe jest też użycie biblioteki argparse, tylko pojawia się problem, jak python zainstalowany na serwerze jest 'czysty' i nie ma szans na doinstalowanie dodatkowej biblioteki, którą jest argparse.
Dlatego napisałem Menu, skrypt który jest dla mnie wyjściową formą dla pisania jakiegokolwiek skryptu. Ma on swoje ograniczenia, jednak starałem się go pisać tak, by był możliwie łatwy, szeroko funkcjonalny i łatwy do zaadoptowania do każdej aplikacji Linuksowej.

Co skrypt daje:
  • łatwe dodawanie argumentów
  • każdy element (argument) jest jednocześnie elementem wywoływanego menu (opcja m)
  • skrypt ma wbudowaną pomoc
  • skrypt może wymusić na użytkowniku podanie argumentu
  • skrypt waliduje wprowadzane argumenty, w przypadku submenu subargumenty
  • skrypt pozwala na rewers argumentu z subargumentem
  • skrypt posiada opcję sprawdzającą czy argument (funkcja) był wywołany jako argument podczas uruchamiania skryptu czy z menu
  • skrypt zawiera oddzielny plik ze wszystkimi tekstami komunikującymi się z użytkownikiem końcowym, przez co może być bardzo szybko przez każdego przetłumaczony na dowolny język, defaultowy język skryptu to angielski
  • skrypt składa się z 4 plików:
  •    -- menu.py - właściwa logika skryptu
  •    -- menu_text.py - zawiera zbiór wszystkich tekstów do komunikacji z użytkownikiem
  •    -- menu_config.py - zawiera zbiór wszystkich zmiennych konfiguracyjnych, listę argumentów z opisem ich funkcjonalności, listę argumentów które muszą mieć subargument (powtórzone z pierwszej listy), oraz listę argumentów które są listą subargumentów (w postaci słownika)
  •    -- main.py - tutaj możesz zawsześć treść właściwą dla skryptu który piszesz, ubraną w funkcję

Skrypt został umieszczony przeze mnie na moim koncie github pod adresem:
https://github.com/TomaszWojcik88/Menu

Skrypt umieszczam bez licencji, wykorzystuj go jak tylko chcesz. Za wszelkie szkody, które jakimś cudem mógłbyś (lub mogłabyś) narobić skryptem nie odpowiadam.

Bardzo chętnie witam wszelkie pytania lub sugestie  Uśmiech
Zapisane
« Odpowiedz #1 : 14:35 27/02/18 »
raydeal Offline
Professional Python User

Zobacz profil
***

Reputacja: 68
Wiadomości: 409


Cześć,

Brzmi ciekawie ale...
czy mógłbyś rozwinąć myśl co to znaczy "czysty" python?
Cytuj
Możliwe jest też użycie biblioteki argparse, tylko pojawia się problem, jak python zainstalowany na serwerze jest 'czysty' i nie ma szans na doinstalowanie dodatkowej biblioteki, którą jest argparse.
argparse jest wbudowaną biblioteką pythona i instalując go ma się ją dostępną, nie trzeba nic doinstalowywać. Czy czasem jest inaczej?

Warto na końcu main.py wywołanie dać w warunku if __name__ == "__main__":
Nie wiem czy potrzebna jest klasa Main tym bardziej że jej funkcje nazwałeś function_x.
Zapisane
« Odpowiedz #2 : 05:14 28/02/18 »
TomekW Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 2


Cześć,

"Czysty" Python (w wersji 2) który mam na Produkcji nie zawiera biblioteki argparse.
Z góry założyłem, że skoro nie ma go tam, to nie ma w ogóle. Sprawdziłem na swoim komputerze i faktycznie jest ta biblioteka w podstawie "czystego" Pythona.

Dodałem if __name__ == "__main__":
Spotkałem się z tym zapisem ale do końca nie wiem co to znaczy. Poczytałem trochę o tym, ale dalej nie wiem po co to. Czy mógłbyś mi w dwóch zdaniach opisać po co to się stosuje, albo wysłać jakiś link gdzie jest to wytłumaczone w przystępny sposób?

Klasa Main, jest po prostu nazwana Main. Może to mój błąd, bo założenie jest takie, że ta klasa ma się nazywać zgodnie z potrzebą twojego skryptu. Cały Skrypt Menu jest tak napisany by był gotowym szkieletem dla czegokolwiek co piszesz. Ubrałem to w klasę, ponieważ większość tego co piszę, to są raczej większe skrypty i bez klas by się po prostu nie obeszło. Chodzi także o porządek, by wszystko było jasne i klarowne. Skrypt który nie jest pozamykany w klasy, po prostu ciężej się czyta (przynajmniej dla mnie). Łatwiej jest zrobić kilka metod jednej klasy niż pojedyncze funkcje, a w razie potrzeby stworzyć dodatkową klasę i jej metody. Niebawem umieszczę więcej skryptów to zobaczysz o co mi chodzi.

Ps. Pracuję w nocy, a więc żyję również głównie w nocy, w dzień raczej nie odpiszę, na pewno nie w tym tygodniu.
Zapisane
« Odpowiedz #3 : 17:50 28/02/18 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 28
Wiadomości: 338


Cytuj
"Czysty" Python (w wersji 2) który mam na Produkcji nie zawiera biblioteki argparse.


Od pythona 2.7 argparse jest na pokładzie. A przed czasami py2.7 było kilka innych możliwości parsowania argumentów podawanych z linii komend.


Cytuj
Dodałem if __name__ == "__main__":
Spotkałem się z tym zapisem ale do końca nie wiem co to znaczy. Poczytałem trochę o tym, ale dalej nie wiem po co to. Czy mógłbyś mi w dwóch zdaniach opisać po co to się stosuje, albo wysłać jakiś link gdzie jest to wytłumaczone w przystępny sposób?

Tu chodzi o importy. To jest zabezpieczenie przed uruchomieniem nie tego co potrzeba, gdy importujesz ten plik z innego pliku, innego projektu...

Jest to wyjaśnione m.in. tu:  https://stackoverflow.com/questions/419163/what-does-if-name-main-do

Rzuciłem okiem na Twój kod. Nie pisze się lunched tylko launched jeśli chcesz używać angielskich nazw w kodzie Mrugnięcie


Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot