如何在Cython单元格中允许c printf在IPython Notebook中打印输出?

6
%%cython
from libc.stdio cimport printf
def test():
    printf('abc')

如果我运行test(),它不会打印任何内容。
目前我做的事情很愚蠢,就像这样:
cdef char s[80]
sprintf(s, 'something')
print s

在Cython中,如何更好地使用printf函数?为什么它没有输出?


4
目前,IPython 只能在 Python 级别捕获和显示输出。关于这个问题的讨论可以参考 GitHub 上的这个问题(https://github.com/ipython/ipython/issues/1230)。但是我不知道输出结果去了哪里。 - michitux
2个回答

4

您可以使用wurlitzer包来捕获C级别的标准输出和错误,然后将其重定向到IPython。

例如,在您的Jupyter笔记本中包含以下代码块:

%load_ext Cython
%load_ext wurlitzer

%%cython
from libc.stdio cimport printf
def test():
    printf('abc')

test()
# prints "abc"

1
wurlitzer似乎只能在Unix系统上工作,因为它使用的是仅限于Unix的库fcntl - ead
似乎无法在source.c中与printf()一起使用,也无法在%%cython单元格中的cdef extern from "source.c"中使用。有什么想法吗? - Jayen

1

输出将会在运行Jupyter notebook的终端(控制台)中打印。不确定如何在Jupyter中显示它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接