您的位置:

关于c中嵌入python解释器的信息

本文目录一览:

Python 入门指南之使用 Python 解释器

Python 解释器通常被安装在目标机器的 /usr/local/bin/python3.5 目录下。将 /usr/local/bin 目录包含进 Unix shell 的搜索路径里,以确保可以通过输入:

命令来启动他。[1] 由于 Python 解释器的安装路径是可选的,这也可能是其它路径,你可以联系安装 Python 的用户或系统管理员确认(例如, /usr/local/python 就是一个常见的选择)。

在 Windows 机器上,Python 通常安装在 C:Python35 位置,当然你可以在运行安装向导时修改此值。要想把此目录添加到你的 PATH 环境变量中,你可以在 DOS 窗口中输入以下命令:

通常你可以在主窗口输入一个文件结束符(Unix 系统是 Control-D ,Windows 系统是 Control-Z )让解释器以 0 状态码退出。如果那没有作用,你可以通过输入 quit() 命令退出解释器。

Python 解释器具有简单的行编辑功能。在 Unix 系统上,任何 Python 解释器都可能已经添加了 GNU readline 库支持,这样就具备了精巧的交互编辑和 历史 记录等功能。在 Python 主窗口中输入 Control-P 可能是检查是否支持命令行编辑的最简单的方法。如果发出嘟嘟声(计算机扬声器),则说明你可以使用命令行编辑功能;更多快捷键的介绍请参考 交互式输入行编辑 历史 回溯。如果没有任何声音,或者显示 ^P 字符,则说明命令行编辑功能不可用;你只能通过退格键从当前行删除已键入的字符并重新输入。

Python 解释器有些操作类似 Unix shell:当使用终端设备(tty)作为标准输入调用时,它交互的解释并执行命令;当使用文件名参数或以文件作为标准输入调用时,它读取文件并将文件作为 脚本 执行。

第二种启动 Python 解释器的方法是 python -c command [arg] ... ,这种方法可以在 命令行 执行 Python 语句,类似于 shell 中的 -c 选项。由于 Python 语句通常会包含空格或其他特殊 shell 字符,一般建议将 命令 用单引号包裹起来。

有一些 Python 模块也可以当作脚本使用。你可以使用 python -m module [arg] ... 命令调用它们,这类似在命令行中键入完整的路径名执行 模块 源文件一样。

使用脚本文件时,经常会运行脚本然后进入交互模式。这也可以通过在脚本之前加上 -i 参数来实现。

调用解释器时,脚本名和附加参数传入一个名为 sys.argv 的字符串列表。你能够获取这个列表通过执行 import sys ,列表的长度大于等于1;没有给定脚本和参数时,它至少也有一个元素: sys.argv[0] 此时为空字符串。脚本名指定为 '-' (表示标准输入)时, sys.argv[0] 被设定为 '-' ,使用 -c 指令 时, sys.argv[0] 被设定为 '-c' 。使用 -m 模块 参数时, sys.argv[0] 被设定为指定模块的全名。-c 指令 或者 -m 模块 之后的参数不会被 Python 解释器的选项处理机制所截获,而是留在 sys.argv 中,供脚本命令操作。

从 tty 读取命令时,我们称解释器工作于 交互模式 。这种模式下它根据主提示符来执行,主提示符通常标识为三个大于号( );继续的部分被称为 从属提示符 ,由三个点标识( ... )。在第一行之前,解释器打印欢迎信息、版本号和授权提示:

输入多行结构时需要从属提示符了,例如,下面这个 if 语句:

关于交互模式更多的内容,请参见 交互模式。

默认情况下,Python 源文件是 UTF-8 编码。在此编码下,全世界大多数语言的字符可以同时用在字符串、标识符和注释中 — 尽管 Python 标准库仅使用 ASCII 字符做为标识符,这只是任何可移植代码应该遵守的约定。如果要正确的显示所有的字符,你的编辑器必须能识别出文件是 UTF-8 编码,并且它使用的字体能支持文件中所有的字符。

你也可以为源文件指定不同的字符编码。为此,在 #! 行(首行)后插入至少一行特殊的注释行来定义源文件的编码:

例如,如果你的编辑器不支持 UTF-8 编码的文件,但支持像 Windows-1252 的其他一些编码,你可以定义:

这样就可以在源文件中使用 Windows-1252 字符集中的所有字符了。这个特殊的编码注释必须在文件中的 第一或第二 行定义。

Footnotes

怎么样才能在c程序中嵌入python而不用依赖系统安装的python而运行。也说是说怎么把pyth

这个思路不是很行得通。。建议题主再思考一下程序结构。

为何要在C程序中嵌入python呢?

windows下,如果是一个独立的python脚本,可以用py2exe转换成一个可独立运行的exe。因此如果能把python代码分离出来,问题就简单了。

求助 关于c程序中嵌入Python的问题

嵌入

与python的扩展相对,嵌入是把Python解释器包装到C的程序中。这样做可以给大型的,单一的,要求严格的,私有的并且(或者)极其重要的应用程序内嵌Python解释器的能力。一旦内嵌了Python,世界完全不一样了。

C调用python中的函数:

hw.py:

#coding=utf8

def hw_hs(canshu):

return canshu

if __name__ == "__main__":

ccss = "I am hw"

print hw_hs(ccss)

helloWorld.py:

#coding=utf8

import hw

def hello():

ccss = "I am helloWorld"

return hw.hw_hs(ccss)

if __name__ == "__main__":

print hello()

testcpypy.c:

//#include "testcpypy.h"

#include Python.h

#include stdio.h

#include stdlib.h

int main()

{

//初始化Python

Py_Initialize();

if (!Py_IsInitialized()) {

printf("Py_Initialize");

getchar();

return -1;

}

//执行python语句

PyRun_SimpleString("import sys");

PyRun_SimpleString("sys.path.append('./')");

PyObject *pModule = NULL;

PyObject *pFunc = NULL;

PyObject *reslt =NULL;

//载入python模块

if(!(pModule = PyImport_ImportModule("helloWorld"))) {

printf("PyImport_ImportModule");

getchar();

return -1;

}

//查找函数

pFunc = PyObject_GetAttrString(pModule, "hello");

if ( !pFunc || !PyCallable_Check(pFunc) )

{

printf("can't find function [hello]");

getchar();

return -1;

}

//调用python中的函数

reslt = (PyObject*)PyEval_CallObject(pFunc, NULL);

//printf("function return value : %d\r\n", PyInt_AsLong(reslt));

//将python返回的对象转换为C的字符串

char *resltc=NULL;

int res;

res = PyArg_Parse(reslt, "s", resltc);

if (!res) {

printf("PyArg_Parse");

getchar();

return -1;

}

printf("resltc is %s", resltc);

getchar();

//释放内存

Py_DECREF(reslt);

Py_DECREF(pFunc);

Py_DECREF(pModule);

//关闭python

Py_Finalize();

return 0;

}

编译:

gcc -o testcpypy testcpypy.c -IC:\Python27\include -LC:\Python27\libs -lpython27 ---C:\Python27为python安装目录

或:

gcc -c testcpypy.c -IC:\Python27\include

gcc -o testcpypy.exe testcpypy.o -LC:\Python27\libs -lpython27

执行结果:

带参数的情况:

#include "callpydll.h"

#include "Python.h"

#include stdio.h

#include stdlib.h

#include string.h

#include stdarg.h

int callhello(char *instr, char *outstr)

{

PyObject *pModule = NULL;

PyObject *pFunc = NULL;

PyObject *reslt = NULL;

PyObject *pParm = NULL;

char *resltc = NULL;

int resltn;

int res;

char *helloWorld = "TestIM_ProtocBuf";

char *im_account = "aaaa";

char *auth_code = "aaaa";

char *im_uid = "aaaa";

char *proxy_topic = "";

//初始化Python

Py_Initialize();

if (!Py_IsInitialized()) {

printf("Py_Initialize");

getchar();

return -1;

}

//执行python语句

PyRun_SimpleString("import sys");

PyRun_SimpleString("sys.path.append('./')");

//载入python模块

if(!(pModule = PyImport_ImportModule(helloWorld))) {

printf("PyImport_ImportModule");

getchar();

return -2;

}

//查找函数

pFunc = PyObject_GetAttrString(pModule, "login_proxy_body_serialize");

if ( !pFunc || !PyCallable_Check(pFunc) )

{

printf("can't find function [hello]");

getchar();

return -3;

}

//参数转换C -- python, 参数必须是元组(一个参数也是,否则会失败!!!坑啊)

pParm = Py_BuildValue("(ssss)", im_account, auth_code, im_uid, proxy_topic);

//调用python中的函数

reslt = (PyObject*)PyEval_CallObject(pFunc, pParm);

//将python返回的对象转换为C的字符串

res = PyArg_ParseTuple(reslt, "si", resltc, resltn);

if (!res) {

printf("PyArg_Parse");

getchar();

return -4;

}

printf("resltn is %d", resltn);

memcpy(outstr, resltc, strlen(resltc)+1);

//释放内存

Py_DECREF(reslt);

Py_DECREF(pFunc);

Py_DECREF(pModule);

Py_DECREF(pParm);

//关闭python

Py_Finalize();

return 0;

}

int main() {

int i;

char *dais = "iammain";

char res[10240];

memset(res,'\0',sizeof(res));

i = callhello(dais, res);

if(0 != i) {

printf("Notify:error");

getchar();

return -1;

}

printf("result is %s", res);

getchar();

return 0;

}

【Python】【C++】C++嵌入Python的一些问题,模块无法导入

无法import是因为路径不对啊。你需要通过sys.path里加入你要import的模块的路径就可以解决了。

这和C++没有关系。与嵌入式没有关系。另外有些安装包,它是解压后运行,所以也需要注意目录的问题。

嵌入python与命令行使用python执行,结果是一样的。使用的都是cpython的解释器。所以不用担心有什么不同。

以前还在c++ builder里用过python的程序。也是一样。

CPython解释器是什么意思?如何安装?

将Python源代码翻译为字节码的程序称为Python解释器,CPython是一个用C编写的Python解释器,它也是Python自带的解释器,包含在Python安装程序中。