Для перенаправления в файл (моя ссылка https://askubuntu.com/questions/625224/how-to-redirect-stderr-to-a-file):
python3 python_cython_example.py 2>hello.txt
Это просто перенаправление stderr (не stdout) в файл. Я не думаю, что Cython ведет себя иначе, чем Python здесь.
Что касается sys.exit
, у меня работает следующее:
pyx file:
def f():
import sys
sys.exit()
py file:
import pyximport; pyximport.install()
import cy_exc
cy_exc.f()
print("This line is not run")
Вы также можете использовать встроенный exit()
(который также работает для меня), но работает по довольно похожему механизму.
Документация для sys.exit
говорит, что он завершаетсяВызывая исключение. Поэтому вам нужно убедиться, что вы не перехватываете это исключение (например, с помощью универсального блока except:
). Если вы вызываете его из функции cdef
, не возвращающей объект, который выВам нужно будет убедиться, что знает, что Cython проверяет наличие исключений со спецификацией except
. Если вы вызываете его из другого потока, вам может понадобиться другой механизм сигнализации (но я думаю, что Cython prange
конструкция должна уметь справляться)
Если этона самом деле не работает для вас, вы также можете позвонить os._exit
.Это пропускает всю очистку, которую обычно выполняет Python (например, очистка и закрытие открытых файлов).Вполне вероятно, что он будет работать в большем количестве случаев, поскольку он не реализован в качестве исключения.