Normalnie Fabric kończy działanie, gdy wywołanie run() zwraca niezerowy kod wyjścia. W przypadku niektórych połączeń jest to jednak oczekiwane. Na przykład PNGOut zwraca kod błędu 2, gdy nie jest w stanie skompresować pliku.Czy mogę przechwytywać kody błędów podczas korzystania z funkcji Fabric do uruchamiania() w zdalnej powłoce?
Obecnie mogę tylko obejść to ograniczenie przez użycie logiki powłoki (do_something_that_fails || true
lub do_something_that_fails || do_something_else
), ale wolałbym zachować logikę w zwykłym języku Python (tak jak obietnica Fabric).
Czy istnieje sposób na sprawdzenie kodu błędu i zareagowanie na nie zamiast wywołania paniki i śmierci? Nadal chcę zachowań domyślnych dla innych połączeń, więc zmiana ich zachowania poprzez modyfikację środowiska nie wydaje się dobrym rozwiązaniem (i o ile pamiętam, możesz go użyć, aby ostrzec, zamiast umrzeć w każdym razie).
zanim ktoś wyznacza ten duplikat: [To pytanie jest związane] (http://stackoverflow.com/questions/3876936/how-to-continue-the-task-when- fabric-meet-an-error), ale jak już powiedziałem, chcę je poprawić, a nie ignorować. –
Aktualnie akceptowana odpowiedź jest opatrzona datą. Od lipca 2013 r. Istnieje zmienna środowiskowa, która pozwala określić, który wyjątek powinien zostać podniesiony w przypadku wystąpienia błędu (domyślnie jest to 'SystemExit', który nie jest potomkiem wyjątku, dlatego zazwyczaj powoduje awarię programu). Zobacz moją odpowiedź: http://stackoverflow.com/a/25293275/901641 – ArtOfWarfare
// Ciekaw jestem, jak Invoke sobie z tym poradzi. –