關於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安裝程序中。

原創文章,作者:YT1IQ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/130878.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YT1IQ的頭像YT1IQ
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論