我对Cython的使用有两个问题。
1>如何将引发的异常传递到文件中?
我尝试了以下方法,但它无法正常工作。
$ python python_cython_example.py 2>&1 > /tmp/hello.txt
生成的异常仍将打印在屏幕上而不是文件
上2 - ;如何在Cython模块中退出程序?
在调试短语期间,我想明确退出应用程序,但sys.exit
对我不起作用。我还有其他选择吗?
答案 0 :(得分:0)
重定向到文件(我的引用为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文件:
def f():
import sys
sys.exit()
py文件:
import pyximport; pyximport.install()
import cy_exc
cy_exc.f()
print("This line is not run")
您也可以使用内置exit()
(这也适用于我),但工作方式非常相似。
documentation for sys.exit
表示通过提出异常退出。因此,您需要确保不会拦截此异常(例如,使用全部except:
阻止)。如果您从cdef
函数调用它而不返回对象,则需要确保that Cython knows to check for exceptions具有except
规范。如果你从另一个线程调用它,你可能需要一个不同的信令机制(但我认为Cython prange
构造应该能够应对)
如果这对您不起作用,您也可以致电os._exit
。这会跳过Python通常会做的所有清理工作(例如刷新和关闭打开的文件)。它可能在更多情况下工作,因为它没有作为例外实现。