c++嵌入python urllib

Posted

技术标签:

【中文标题】c++嵌入python urllib【英文标题】:c++ embed python urllib 【发布时间】:2015-12-15 03:50:56 【问题描述】:

python 2.7.10(./Watcher/epMain.py):

import subprocess
import hashlib
import os
import sys
import zipfile
import httplib
#import urllib 
#import urllib2

def letsbegin():
    subprocess.call('a.exe')
    httpClient = httplib.HTTPConnection('www.google.com', 80, timeout=30)
    httpClient.request('GET', '/updata/Client_V.html')
    response = httpClient.getresponse()
    targetV = response.read()
letsbegin()

c++:

Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./Watcher')");
PyObject *pyMain = PyImport_ImportModule("epMain")

pyMain 始终是NULL,但是在我将 python 代码更改为:

 import subprocess
 import hashlib
 import os
 import sys
 import zipfile
 #import httplib
 #import urllib 
 #import urllib2

def letsbegin():
    subprocess.call('a.exe')
    httpClient = httplib.HTTPConnection('www.google.com', 80, timeout=30)
    httpClient.request('GET', '/updata/Client_V.html')
    response = httpClient.getresponse()
    targetV = response.read()
letsbegin()

然后可以在我的 c++ 代码中加载这个模块 但是我很想在这个项目中使用httplib,如何?我不能使用:

PyImport_ImportModule("httplib")

因为 python 代码可能会经常更新。 此外,当我使用

d:\pros\go\Watcher>python epMain.py

有效!urlliburllib2也有这样的问题。

【问题讨论】:

【参考方案1】:

您似乎使用 Python 3.x 包含/libs 而不是 2.x 进行编译。

在 Python 3.x 中,httpliburllib2 不可用。 (它们被重命名为http.client' andurllib.request,urllib.error`)

将编译选项更改为包含,与 Python 2.x 链接。

更新

要检查 C++ 程序使用的版本,请尝试以下代码:

Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("print(sys.version)");
...

【讨论】:

def test(): return sys.version c++: PyObject* Result = PyObject_CallMethod(pyMain, "test", NULL); if(Result) char* s = PyString_AsString(Result); printf(s); // 它返回 2.7.10

以上是关于c++嵌入python urllib的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中嵌入 python

c++中嵌入python

在 C++ VS2015 中嵌入 Python

在 Python GUI 中嵌入 C++ 程序

在 C++ 中嵌入 Python(CPython API)

如何在未安装 python 的系统上嵌入 python 代码来执行 C++ 代码