Ł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:


Blocker wiszący od miesiąca? Mówisz o tym criticalu z zeszłego tygodnia? A, tak, zalogowaliśmy przedwczoraj tego minor buga. Pewnie, zajmę się ASAP tym enhancementem. Nie ma sprawy, jak tylko podomykam taski to wezmę się za ten ficzer, tylko go jeszcze wyestymujemy przed kolejnym sprintem.
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