Łapanie wyjątków dla os.system

Odpowiedz Nowy wątek
2018-10-11 00:03
Hsząszcz
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ć?

Pozostało 580 znaków

2018-10-11 09:31
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/lib[...]cess.html#replacing-os-system


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
edytowany 3x, ostatnio: Shalom, 2018-10-11 11:43

Pozostało 580 znaków

2018-10-11 11:33
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:

edytowany 1x, ostatnio: superdurszlak, 2018-10-11 11:36

Pozostało 580 znaków

2018-10-11 17:36
Hsząszcz
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?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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