#! /usr/bin/env python3 import os import sys import re from utilities import hide_exception def read_from_command(command: str) -> list: # command = "tar cf /tmp/backup.tar ." # ret = os.system(command) # ret = [8 Bit Exit code] + [8 Bit Flags] # exit_code = ret >> 8 try: with os.popen(command, 'r') as pipe: return [l.rstrip() for l in pipe.readlines()] except OSError: print("Kann Programm nicht auslesen", file=sys.stderr) # zur Sicherheit auch hier eine Liste zurueckgeben return [] def extract_ip(lines: list) -> list: # [0-9] 1 Zeichen aus der Gruppe 0 bis 9 (\d) # regex{1,3} regex matcht 1 bis 3 mal # \. 1 echter Punkt # . 1 beliebiges Zeichen # regex? regex match 0 oder 1 mal # regex+ regex match 1 mal oder beliebig oft # regex* regex match 0 mal oder beliebig oft # regex{3} regex match exakt 3 mal # (regex) Gruppierung des Teil-Ausdrucks # z.B. fuer Quantifizierung ?, +, *, {} # PLUS als Nebeneffekt werden Variablen erzeugt # ^ Anfang der Zeile # $ Ende der Zeile # .* Beliebig viele beliebige Zeichen (so viel wie geht) # .*? Beliebig viele beliebige Zeichen, non-greedy # [:space:] 1 Zeichen aus der Gruppe Spaces # \s 1 Whitespace (Space, Tab) regex = r'.*inet\s(([0-9]{1,3}\.){3}[0-9]{1,3})' addresses = [] for line in lines: match = re.match(regex, line) if match: #print(line) #print("Gesamte IP:", match.group(1)) #print("3. Oktett :", match.group(2)) #print("-" * 20) addresses.append(match.group(1)) # Mehrfachzuweisung aller gefundener Gruppen # ip, dummy = match.groups() return addresses def main(): lines = read_from_command("ip address show") local_ips = extract_ip(lines) print("Aktuelle Adressen:", local_ips) hide_exception(main)