Cython:管道文件异常并显式中止

时间:2018-05-22 14:42:40

标签: cython

我对Cython的使用有两个问题。

1>如何将引发的异常传递到文件中?

我尝试了以下方法,但它无法正常工作。

$ python python_cython_example.py 2>&1 > /tmp/hello.txt

生成的异常仍将打印在屏幕上而不是文件

2 - ;如何在Cython模块中退出程序?

在调试短语期间,我想明确退出应用程序,但sys.exit对我不起作用。我还有其他选择吗?

1 个答案:

答案 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通常会做的所有清理工作(例如刷新和关闭打开的文件)。它可能在更多情况下工作,因为它没有作为例外实现。