æ¥éª¤1ï¼å®è£
Pythonå¼åå
ç±äºéè¦è®¿é®Python/C APIï¼é¦å
å®è£
Pythonå¼åå
ã
å¨Debianï¼UbuntuæLinux Mintä¸ï¼
å¨CentOSï¼FedoraæRHELä¸ï¼
å®è£
æååï¼Python头æ件å¨/usr/include/python2.7ãæ ¹æ®Linuxåè¡ççä¸åï¼ç¡®åçè·¯å¾å¯è½æ¯ä¸ç¸åçãä¾å¦ï¼CentOS 6ä¸æ¯/usr/include/python2.6ã
æ¥éª¤2ï¼åå§å解éå¨å¹¶è®¾ç½®è·¯å¾
Cä¸åµå
¥Pythonç第ä¸æ¥æ¯åå§åPython解éå¨ï¼è¿å¯ä»¥ç¨ä»¥ä¸Cå½æ°å®æã
åå§å解éå¨åï¼éè¦è®¾ç½®ä½ çCç¨åºä¸è¦å¯¼å
¥çPython模åçè·¯å¾ãä¾å¦ï¼æ¯å¦ä½ çPython模åä½äº/usr/local/modulesãç¶å使ç¨ä»¥ä¸Cå½æ°è°ç¨æ¥è®¾ç½®è·¯å¾ã
æ¥éª¤3ï¼æ°æ®è½¬æ¢
Cä¸åµå
¥Pythonæéè¦çæ¹é¢ä¹ä¸æ¯æ°æ®è½¬æ¢ãä»Cä¸ä¼ éæ°æ®å°Pythonå½æ°ï¼éè¦é¦å
å°æ°æ®ä»Cæ°æ®ç±»å转æ¢å°Pythonæ°æ®ç±»åãPython/C APIæä¾åç§å½æ°æ¥å®ç°è¿ãä¾å¦ï¼è½¬æ¢Cå符串å°Pythonå符串ï¼ä½¿ç¨PyString_FromStringå½æ°ã
å¦å¤ä¸ä¸ªç±»ä¼¼å½æ°PyInt_FromLongï¼å°Cä¸longæ°æ®ç±»å转æ¢ä¸ºPython intãæ¯ä¸ªPython/C APIå½æ°è¿åä¸ä¸ªPyObjectç±»åçå¼ç¨ã
æ¥éª¤4ï¼å®ä¹ä¸ä¸ªPython模å
å½ä½ æ³åµå
¥Python代ç å°å¦ä¸ç§è¯è¨å¦Cï¼è¯¥ä»£ç éè¦è¢«åæPython模åï¼ç¶åç¨å¦ä¸ç§è¯è¨â导å
¥âãæ以让æ们æ¥ççå¦ä½å¨Cä¸å¯¼å
¥Python模åã
为äºè¿è¡è¯´æï¼æ们å®ç°ä¸ä¸ªç®åçPython模åä¾åå¦ä¸ï¼
以ä¸çPythonå½æ°æä¸ä¸ªå符串ä½ä¸ºåæ°å¹¶è¿å两个éå¤çå符串ãä¾å¦ï¼å¦æè¾å
¥å符串æ¯âcyberpersonsâï¼è¯¥å½æ°è¿å'cyberpersonscyberpersons'ãæ¤æ¨¡åæ件å½å为âprintData.pyâ并å°å®æ¾å¨åé¢å£°æçPython模åç®å½ä¸ï¼/usr/local/modulesï¼ã
æ¥éª¤5ï¼å è½½ä¸ä¸ªPython模å
ç°å¨ä½ å·²ç»å®ä¹äºPython模åï¼æ¯æ¶åå¨Cç¨åºä¸å è½½å®äºã导å
¥æ¨¡åçC代ç çèµ·æ¥åè¿æ ·ï¼
æ¥éª¤6ï¼æ建å½æ°çåæ°
å½å è½½ä¸ä¸ªæ¨¡åæ¶ï¼å¯ä»¥è°ç¨æ¨¡åä¸å®ä¹çPythonå½æ°ãé常ï¼æ们éè¦ä¼ éä¸ä¸ªæå¤ä¸ªåæ°å°ä¸ä¸ªPythonå½æ°ãæ们å¿
é¡»æ建ä¸ä¸ªPythonå
ç»å¯¹è±¡ï¼å®å
æ¬Pythonå½æ°ä¸çåæ°ã
å¨æ们çä¾åä¸ï¼printDataå½æ°å®ä¹å¸¦ä¸ä¸ªåæ°ç模åãå æ¤ï¼æ们æ建ä¸ä¸ªå¤§å°æ¯ä¸çPythonå
ç»å¯¹è±¡å¦ä¸ãæ们å¯ä»¥ä½¿ç¨PyTuple_SetItem设置å
ç»å¯¹è±¡çæ¯ä¸ªé¡¹ã
æ们已ç»æåæ建ä¸ä¸ªåæ°ä¼ éå°å½æ°è°ç¨ï¼æ¯æ¶åä»Cç¨åºè°ç¨pythonå½æ°äºã
æ¥éª¤7ï¼è°ç¨Pythonå½æ°
ä¸æ¦æåå建Pythonå
ç»å¯¹è±¡ä½ä¸ºå½æ°åæ°ï¼æ们å¯ä»¥è°ç¨ä¸ä¸ªå¸¦åæ°çPythonå½æ°ã为æ¤ï¼éè¿ä½¿ç¨PyObject_GetAttrStringé¦å
è·å¾æ¨¡åä¸å®ä¹çå½æ°çå¼ç¨ï¼ç¶å使ç¨PyObject_CallObjectè°ç¨è¯¥å½æ°ãä¾å¦ï¼
æ¥éª¤8ï¼é误æ£æ¥
é¿å
è¿è¡æ¶é误ç常è§æ¹æ³æ¯æ£æ¥å½æ°çè¿åå¼å¹¶æ ¹æ®è¿åå¼éåéå½çè¡å¨ã类似äºCç¨åºä¸çå
¨å±åéerrnoï¼Python/C APIæä¾ä¸ä¸ªå
¨å±æ示符ï¼å®æ¥åæååççé误ãå½Python/C APIå½æ°å¤±è´¥ï¼å
¨å±æ示符设置为æ示é误ï¼å¹¶ä¸PyErr_Printå¯ä»¥ç¨äºæ¾ç¤ºç¸åºç人类å¯è¯»çtrackbackãä¾å¦ï¼
å¨ä½ çåºç¨ç¨åºä¸ï¼ä½ å¯ä»¥è½»æ¾å°å°åç§é误æ£æ¥ã
è¿éæ¯å®æ´çCç¨åºï¼å®å¦æ¬æç¨æè¿°çåµå
¥Python代ç ã
æ¥éª¤9ï¼ç¼è¯åæ§è¡
ä¿å以ä¸ä»£ç å°finalCode.cï¼å¹¶ä¸é¾æ¥Pythonåºï¼-lpython2.7ï¼ç¼è¯è¯¥ä»£ç ãæ ¹æ®åè¡ççä¸åï¼å¯è½ä½¿ç¨ä¸åççæ¬ï¼ä¾å¦ï¼-lpython2.6ï¼ã
温馨提示:答案为网友推荐,仅供参考