作者KSJ (阿真)
看板Python
标题[问题] 让Python 用C运算 之 传变数的问题
时间Sat Jun 6 13:20:37 2009
我想应该是观念上的问题 但我自己无从解起
想请版上的大家帮个忙
在Python官网里有一篇
Extending and Embedding the Python Interpreter
的1.1 A Simple Example
有简单的介绍如何使用Python 请C运算
里面有个PyArg_ParseTuple()的指令
我解读是 例如:PyArg_ParseTuple(args, "s", &command) (本中例子)
把传进来的py变数(args)做分析,是一个字串,然後让
command变数的记忆体位置变成py变数的记忆体位置(?!)
也许解读有误 但如果传变数完成的话
就可以把py字串的内容 传达给C的command变数了
然後写了一些比较长的程式 其中传变数的地方如下:
long int func_num;
PyObject *pylagS,*pylagT,*pyCOV,*pyFitVar;
//上面只是宣告五个变数要接Python传来的东西
PySys_WriteStdout("parse OK");
//这是要"手动"测式程式有没有跑到这
//传递参数
if (!PyArg_ParseTuple(args, "(OOOOI)", \
&pylagS,&pylagT,&pyCOV,&pyFitVar,&func_num)) return NULL;
//上面是这个函数常用的做法 如果传变数失败 会要求传回NULL
PySys_WriteStdout("parse OK");
//看有没有跑到这
之後做的是把Py的那些变数转给c的阵列 然後做我要的计算
在我用Python import 编译好的 pyd档 然後直接使用这个"长的程式"
是可以跑完的(表示程式方面运作没问题)
但是 我认为这个"长的程式" 应该也可以在C中使用吧??(这部份想请教)
也就是说:
在C写一个py函式
static PyObject *funcA (PyObject *self, PyObject *args)
{
(把args做一些修改变成args2)
//一段程式码
PyObject *value = funcB(NULL,args2);
//另一个写好的funcB
return Py_BuildValue("N",value);
}
不知道这样行不行得通
里面的funcB就是我的"长的程式"
单单使用funcB是没问题的
而要使用funcA传变数给funcB使用 就会有"误"
"误"是指 程式爆掉 不是例外 是XP不回报的那种
是表示传回NULL吗??
因为传不成功 不是该传给NULL吗 怎麽会有误
总觉得是我哪里的观念有误
但这种complie会过 单独使用也会过 但合并使用就会爆的问题...
我想请大家给我点提示或决解方向
有任何我上面说不清楚的地方请务必发问 我会尽量补齐的Q_Q
----以下是题外话----
版上有些"利用Python 从网路上抓取资讯"的文章
有些是抓股票资讯、有些是抓网页内容
Python官网似乎也有提供基本的module
如果想看一些很简单的范例
或是很详细的解说
有人可以提供一些给初心者参考的网页吗??
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.63. 180
1F:推 StubbornLin:一些抓网页范例: 06/06 13:59
※ 编辑: KSJ 来自: 140.112.63.180 (06/06 14:46)
※ 编辑: KSJ 来自: 112.104.5.233 (06/06 17:54)