Ja w sumie mam tylko kilka użytkowych pierdółek z punktu użytkownika i kogoś kto miałby usiąść do takiego kodu. Bo bibliotek nie znam, więc nie czuję abym mógł się wypowiadać na temat merytoryki :).
- Prosta konwencja, w Pythonie zaczyna się od
def main():
który jest zaraz po importach. Następnie wywołuje się go po wczytaniu wszystkich funkcji na końcu. if __name__ == "__main__":
i w nowej linii: main()
- Interfejs graficzny. Wiem że wielu się burzy "jak można używać interfejsu graficznego". Ale niestety świat okienkowy, coś ma być dla ludzi, musi mieć cholerne okienko - chyba że robisz dla siebie :).
Oczywiście to tylko porada, nie błąd, czy ocena. Po prostu aplikacja nie przeżyje jeśli nie będzie miała okienka bo użytkownicy już tacy są.
- Wszystko przechodzi przez porównywanie równości w string'ach. "AAA" != "aaa" więc dla wpisywanych komend dodaj lower, bo ktoś kliknie shift i nie będzie mu się chciało zmieniać wielkości liter, a przez to nie wykryjesz komendy, zwłaszcza że inputy są krótkie z konsoli. I zawsze jak w przypadku hosts_scan powinieneś pobierać tylko potrzebny ci zakres od początku, bo pisząc
"exit vulns_scan"
nie wykona się nic. Co więcej, obsługę input'u powinieneś zawrzeć w słowniku z lambdami, co zwiększy czytelność kodu i zaoszczędzi ci wiele pisania. Zamiast dodawać elif i czynności zagnieżdzone, dodajesz wpis w słowniku i wszystko musi działać, kolejne polecenia dla komendy głównej sprawdzasz w funkcji jeśli nie będzie to None :).
Przykład:
choices = {"exit": (lambda: exit_funct),
"vulns_scan": (lambda: vulns_scan_funct)}
for input in command_line.split()[0]
if input in choices:
first_word = len(input)
choices.get(input[:first_word])(command_line.split()[1:] if len(command_line.split() > 1 else None)
Oczywiście da się to zrobić czytelniej i jeszcze trochę lepiej, ale pozostawiam to tobie :D.
Może nie jest to jakiś nie wiadomo jaki optymalizer, ale szybko pozwala dodawać kolejne funkcje, jedyną kontrolką w funkcjach przy definicji którą musisz dać do takiego wywołania to def func(Command_line_list):
4. Ale duży + za czytelność kodu, pomimo że to python2 i nie ma format'u, ale wszystko jest jasne, bibliotek nie znam więc merytoryki funkcji niestety nie ocenię, mogę tylko się wypowiedzieć na tematy o których wiem cokolwiek :P.
- Pomysł fajny, jeśli będziesz kontynuować daj znać o postępach :D.