我为Python编译了一个简单的hello world C模块,它在我尝试过的所有东西中都能正常工作,但是空闲。以下是我输入的测试:
>>> import hello
>>> hello.say_hello('Justin')
我在命令提示符下使用Python(我使用的是Windows)、Eclipse的PyDev和PieDream尝试过,它们都打印出Hello Justin!
。但是,在IDLE中它不打印任何内容-它只是给我提示。在
我使用的模块和setup.py
来自{a1}。我认为问题出在编译器上。我使用MinGW,我将其设置为.cfg文件中distutils的编译器。我使用以下命令提示符构建模块:
然后得到
running build
running build_ext
building 'hello' extension
creating build
creating build\temp.win32-2.6
creating build\temp.win32-2.6\Release
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Python26\PC -c hellomodule.c -o build\temp.win32-2.6\Release\hellomodule.o
writing build\temp.win32-2.6\Release\hello.def
creating build\lib.win32-2.6
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.6\Release\hellomodule.o build\temp.win32-2.6\Release\hello.def -LC:\Python26\libs -LC:Python26\PCbuild -lpython26 -lmsvcr90 -o build\lib.win32-2.6\hello.pyd
我在想这可能和-mno cygwin有关,但我不确定。在
对于为什么这个模块不能闲置工作有什么想法或建议?我应该使用不同的编译器吗?在
如果您需要从一个C编码的扩展写入Python的
sys.stdout
,那么可以使用类似于:(另外,大概还有一点错误检查,以防有人做了一些疯狂的事情,比如
del sys.stdout
&c;-)。在当然,如果您需要多次写入,那么只获取
stdout
一次可能更有效,并根据需要将其保留多久,当您完成“打印”工作时,只需将其减少一次(但是,如果您的Python调用者在保留对其以前版本的引用时重新分配sys.stdout
的情况下,这将不太正常:您将继续打印到上一个版本,就像一个行为类似的Python编码模块一样)。这种重复的查找相当于在Python中执行sys.stdout.write(somestring)
,它还每次查找速度稍慢但“语义上更安全”的内容,以防Python调用方使用sys.stdout
执行“相当前卫”的操作(正如您发现的IDLE所做的;-)。((不是那么急躁,真的,所以您可能需要适当地支持它;-)。在听起来像是在直接给
stdout
写信。Python的stdout
与Cstdout
不一定是同一个位置通常,您将返回一个字符串给Python,这样Python就可以将它打印成它自己的
stdout
相关问题 更多 >
编程相关推荐