VC调用Python函数,如何传递一个中文参数?如何得到中文返回值?

时间:2022-01-30 00:15:57
test2.py文件里的内容,很简单的:
# -*- coding: utf-8 -*
def Hello(s):
    print s

然后我在VC 2005新建一个Console项目,调用这个test2.py里的hello函数,给Hello函数传递一个英文字符串比如"Hello Python",很正常地显示出来了。
然而传递一个"u\"你好Python\""字符串,却显示的是:

u"你好Python"
[7682 refs]
请按任意键继续. . .

请问这样的显示结果是否正确?如何去掉前面的"u"? 
还有每次运行都会出现[7682 refs]是什么意思?怎么去掉它?

最后,当在VC调用某个函数以后,如何得到一个中文字符串的返回值?

VC 2005代码如下:

int test2()
{
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc   = NULL;
PyObject * pArg = NULL;

pModule = PyImport_ImportModule("test2");
pFunc   = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(s)", "u\"你好Python\"");
PyEval_CallObject(pFunc, pArg);
Py_Finalize();
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
test2();
system("pause");
return 0;
}

3 个解决方案

#1


前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。

#2


引用 1 楼 thy38 的回复:
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。



求教,为什么
pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(s)", "u\"你好Python\"");

我的 Py_BuildValue() 返回时空值,也就是说参数创建是失败的?
其他地方和LZ是一样的。(Python版本3.1.2)

#3


引用 2 楼 diskingchuan 的回复:
引用 1 楼 thy38 的回复:
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。



求教,为什么
pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(……


另,我想传递一个中文参数到Python中,该如何做?

#1


前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。

#2


引用 1 楼 thy38 的回复:
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。



求教,为什么
pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(s)", "u\"你好Python\"");

我的 Py_BuildValue() 返回时空值,也就是说参数创建是失败的?
其他地方和LZ是一样的。(Python版本3.1.2)

#3


引用 2 楼 diskingchuan 的回复:
引用 1 楼 thy38 的回复:
前两个问题都可以用print来去掉

vc要得到中文返回值,如果是utf8的,得做一下转换。



求教,为什么
pModule = PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(……


另,我想传递一个中文参数到Python中,该如何做?