本文目錄一覽:
- 1、Python 入門指南之使用 Python 解釋器
- 2、怎麼樣才能在c程序中嵌入python而不用依賴系統安裝的python而運行。也說是說怎麼把pyth
- 3、求助 關於c程序中嵌入Python的問題
- 4、【Python】【C++】C++嵌入Python的一些問題,模塊無法導入
- 5、CPython解釋器是什麼意思?如何安裝?
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