Łapanie wyjątków dla os.system

0

Mam taki kod:

    try:
        os.system("wmcgtrl -r test -b add,below,sticky")
    except Exception as err:
        print("".format(err))
        print("jakis_kod")

Specjalnie wywołuję błąd używając błędnej nazwy programu tzn wmcgtrl zamiast wmctrl. Pojawia się komunikat błędu ale nie z klauzuli except a wiem to ponieważ nie wyświetla się "jakis_kod". Do łapania błędów z os.system powinno się stosować jakiś inny sposób łapania wyjątków czy w tym przypadku nie da się nic zrobić?

1

A patrzyłeś do https://docs.python.org/2/library/os.html#os.system ?
Widocznie nie ma tu wyjątku żadnego (mógłby być OSError najwyzej). Możesz sprawdzić wartość zwracaną żeby stwierdzić czy się udało czy nie.
Czytaj:
https://docs.python.org/2/library/subprocess.html#replacing-os-system

0
Hsząszcz napisał(a):

Do łapania błędów z os.system powinno się stosować jakiś inny sposób łapania wyjątków czy w tym przypadku nie da się nic zrobić?

Mechanizm ten sam, tylko jeśli dobrze pamiętam OSError nie jest klasą pochodną Exception, więc żeby go złapać użyj
except OSError:
Lub trochę szerszej klauzuli:
except BaseException:

0

Pokombinowałem z tym co mi podaliście i najlepsze rozwiązanie wydało mi się z replacing os.system(). Musiałem je trochę przekombinować, żeby działało jak ja chcę i mam coś takiego:

run = subprocess.call("blukjhkkjhefish", shell=True)
if run > 0:
      print(sys.stderr, "blad")
      print("blad")

już bez try/except. Co o tym sądzicie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1