⑴ python腳本可以嵌入易語言程序嗎
是已經包含了,但不是以可執行文件的形式存在,而是以動態鏈接庫的形式被調用,你可以在安裝目錄里搜索sqlite3,會找到sqlite3.dll
⑵ 求助 關於c程序中嵌入Python的問題
在C/C++中嵌入Python也比較簡單,首先需要在VC中添加Python的include文件目錄和lib文件目錄:
VC6.0下,打開 tools->options->directories->show directories for,將Python安裝目錄下的inlude目錄添加到inlude files項中,將libs目錄添加到library files項中。
VC2005下,打開tools->options->項目和解決方案->VC++目錄,然後做相同工作。
代碼如下:
//在debug下執行出錯,「無法找到python31_d.lib文件」,後查到原因是:在debug下生成必須要有python31_d.lib文件,否則只能在release下生成
#include <python.h>
int main()
{
Py_Initialize();
PyRun_SimpleString("Print 'hi, python!'");
Py_Finalize();
return 0;
}
Py_Initialize函數原型是:void Py_Initialize(),在嵌入Python腳本時必須使用該函數,它初始化Python解釋器,在使用其他的Python/C API之前必須先調用該函數。可以使用Py_IsInitialized函數判斷是否初始化成功,成功返回True。
PyRun_SimpleString函數原型是int PyRun_SimpleString(const char *command),用來執行一段Python代碼。注意:是否需要維持語句間的縮進呢?
Py_Finalize函數原型是void Py_Finalize(),用於關閉Python解釋器,釋放解釋器所佔用的資源。
PyRun_SimpleFile函數可以用來運行".py"腳本文件,函數原型如下:
int PyRun_SimpleFile(FILE *fp, const char *filename);
其 中fp是打開的文件指針,filename是要運行的python腳本文件名。但是由於該函數官方發布的是由visual studio 2003.NET編譯的,如果使用其他版本的編譯器,FILE定義可能由於版本原因導致崩潰。同時,為簡便起見可以使用如下方式來代替該函數:
PyRun_SimpleString("execfile(『file.py』)"); //使用execfile來運行python文件
Py_BuildValue()用於對數字和字元串進行轉換處理,變成Python中相應的數據類型(在C語言中,所有Python類型都被聲明為PyObject類型),函數原型如下:
PyObject *Py_BuildValue(const char *format, …..);
PyString_String()用於將PyObject*類型的變數轉換成C語言可以處理的char*型,具體原型如下:
char* PyString_String(PyObject *p);
列表操作函數:
PyObject * PyList_New(Py_ssize_t len);
int PyList_SetItem(PyObject *list, Py_ssize_t index, PyObject *item);
PyObject * PyList_GetItem(PyObject *list, Py_ssize_t index);
int PyList_Append(PyObject *list, PyObject *item);
int PyList_Sort(PyObject *list);
int PyList_Reverse(PyObject *list);
Py_ssize_t PyList_Size(PyObject *list);
元組操作函數:
int PyTuple_New(Py_ssize_t len);
int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o);
PyObject * PyTuple_GetItem(PyObject *p, Py_ssize_t pos);
int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize); //注意是**指針
字典操作函數:
PyObject * PyDict_New();
int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val);
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val);
PyObject* PyDict_GetItem(PyObject *p, PyObject *key);
PyObject* PyDict_GetItemString(PyObject *p, const char *key);
//與PyDict_SetItemString對應
int PyDict_DelItem(PyObject *p, PyObject *key);
int PyDict_DelItemString(PyObject *p, char *key);
//與PyDict_SetItemString對應
int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue);
PyObject* PyDict_Items(PyObject *p);
PyObject* PyDict_keys(PyObject *p);
PyObject* PyDict_Values(PyObject *p);
在C/C++中使用Python對象應正確地處理引用計數問題,否則容易導致內存泄漏。當使用Python/C API中的函數創建列表、元組、字典等後,在對其完成操作後應該使用Py_CLEAR()和Py_DECREF()等宏來銷毀這些對象。原型如下:
void Py_CLEAR(PyObject *o);
void Py_DECREF(PyObject *o);
其中,對於Py_CLEAR函數,參數可以為NULL指針,表示不進行任何操作,但是Py_DECREF函數不能為NULL指針,否則導致錯誤。
使用PyImport_Import()函數可以在C中導入Python模塊,返回一個模塊對象。函數原型為:
PyObject* PyImport_Import(PyObject *name);
PyMole_GetDict()函數可以獲得Python模塊中的函數列表,返回一個字典,字典中的關鍵字為函數名,值為函數的調用地址。原型如下:
PyObject* PyMole_GetDict(PyObject *mole);
使用PyObject_CallObject()函數和PyObject_CallFunction()函數可以在C中調用Python中的函數,原型如下:
PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args);
//args是元組形式
PyObject* PyObject_CallFunction(PyObject *callable, char *format, ……);
//format是類似」iss」這樣的參數類型,後面是指定參數
可以使用PyCallable_Check(func)來判斷是否可以調用函數,可以則返回True。
⑶ javascript 中能不能嵌入 python 函數
不可以,JavaScript和python語言解釋器就不一樣。不過python也可以寫前端,Django就是python的前端框架。或者你也可以用python寫伺服器,讓JavaScript和python進行通信即可
⑷ python能夠嵌入到主程序中調試嗎
1、python能做web開發么?
答:web開發與後台語言無關,只要語言能夠生成html(就是字元串),再根據用戶請求返回即可,java,c,php,python都可以做。
2、那常用的php,jsp,asp等是怎樣生成頁面的呢?
答:php,jsp等確實寫在html中,但在伺服器返回給瀏覽器的並不是這些.php,/.jsp文件,而是這些文件生成的html(字元串),python也有類似jsp的psp,但這就需要一些web伺服器的特殊功能了(比如apache的mod_python模塊)
3、那javascript為什麼可以直接返回給瀏覽器?
答:瀏覽器想要處理伺服器返回的字元串,它必須要能看懂並能按照字元串去顯示,如何看懂呢?法一就是它自己有這個能力,比如現在的瀏覽器都能解析html、css、javascript;法二就是瀏覽器自己不懂,但安裝的插件懂,比如flash、java applet。至於python,估計沒人寫這個插件了,因為用伺服器端的方式已經很容易了,沒這個必要。
4、python做web開發該看些什麼?
答:可那你這問題感覺你對一些基礎的東西、原理都沒掌握,呵呵。web開發就是寫個能處理http請求的web app,來一個request,處理,返回一個response,這些request、response都是字元串(符合http協議的)
先要對這些有個理解,然後的話可以看看django,這就不多說了。
(PS:一不小心寫了這么多,希望對你有幫助,吃飯去了)
⑸ Python語言適不適合嵌入式開發,運行與硬體上
可以,但不適合為什麼可以:可以的前提是你要在你的嵌入式設備上移植pvm。能運行pvm就能執行Python位元組碼。為什麼不適合:嵌入式設備多大的處理能力,你知道一個一個兩層的嵌套循環C和Python的效率能差兩個數量級嗎?再說Python的圖像處理調用的是C語言寫的包,你直接上C不就行了嗎?
⑹ python能做嵌入式嗎
近些年來Python非常流行,Python是一種面向對象的解釋型計算機程序設計語言,Python語法簡潔清晰,易讀性以及可擴展性,Python具有豐富和強大的庫,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕松地聯結在一起,常被稱為膠水語言,可以應用在圖形處理,數學處理,Web編程,多媒體應用等領域。定位(推薦學習:Python視頻教程)
在過去的這么長時間里,在嵌入式開發領域中開發語言以C/C++為主,如今基於Python的MicroPython已經涉入到該領域中,MicroPython是一位叫Damien George的工程師,基於ANSI C(C語言標准),然後在語法上又遵循了Python的規范,主要是為了能在嵌入式硬體上(這里特指微控制器級別)更易於的實現對底層的操作,MicroPython官方提供的硬體開發板叫PyBoard,除了官方提供的開發板外,還有一些嵌入式硬體也被成功移植了MicroPython,例如:Esp8266,WiPy,Espruino Pico,STM32F4 Discovery等。
MicroPython pyboard是一個緊湊的電子電路板,在裸機上運行MicroPython,為您提供一個低級Python操作系統,可用於控制各種電子項目。
MicroPython包含許多高級功能,如互動式提示,任意精度整數,閉包,列表理解,生成器,異常處理等。然而它非常緊湊,可以在256k的代碼空間和16k的RAM內運行。
MicroPython旨在盡可能與普通Python兼容,以便您輕松地將代碼從桌面傳輸到微控制器或嵌入式系統。
pyboard是官方的MicroPython微控制器板,完全支持軟體功能。硬體有:
STM32F405RG單片機
具有硬體浮點的168 MHz Cortex M4 CPU
1024KiB快閃記憶體ROM和192KiB RAM
Micro USB連接器,用於電源和串列通信
Micro SD卡插槽,支持標准和高容量SD卡
3軸加速度計(MMA7660)
帶可選備用電池的實時時鍾
左側和右側邊緣為24 GPIO,底行為5 GPIO,底部有LED和開關GPIO
3個12位模數轉換器,16引腳,4個模擬地屏蔽
2x 12位數模轉換器(DAC),可在引腳X5和X6上使用
4個LED(紅色,綠色,黃色和藍色)
1個復位和1個用戶開關
板載3.3V LDO穩壓器,能夠提供高達250mA的電壓,輸入電壓范圍為3.6V至16V
ROM中的DFU引導載入程序,可輕松升級固件
Python本來就是非常容易入門的語言,同時也是應用廣泛的語言,MicroPython將這用容易學習和使用的語言帶到了嵌入式開發中,可以直接操作硬體,並且不需要編譯和下載,可以快速的看到程序的結果,這是非常好的體驗。PyBoard精緻小巧是一塊漂亮的開發板,可以方便的學習和開發,另外MicroPython也支持更多的平台,例如:STM32F4 Discovery Board,NUCLEO-F401RE Board,NUCLEO-F767ZI Board,ESP8266,WiPy等,以上的這些開發板都可以支持MicroPython,在開發板內刷上固件就可以使用了。MicroPython帶來了全新的開發體驗,有興趣的同學可以試試。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python能做嵌入式嗎的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
⑺ python是什麼樣的編程語言
由於近幾年人工智慧的不斷發展,Python也跟著火了,因為Python是深度學習技術的主流應用編程語言。同時它的應用場景很多,被稱為「膠水語言」。優妹兒就幫小夥伴們科普一下,Python這門神奇編程語言的發展趨勢,以及語言特性,幫助想要學習Python的小夥伴們,更清晰的了解它。
Python第一個公開發行版發行於1991年,所以這年被當作Python的誕生年。Python源代碼遵循GPL協議(通用公共許可證),這是一個開源的協議,也就是說你可以免費使用和傳播它,而不用擔心版權的問題。
Python是一種跨平台的計算機程序設計語言, 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,Python越來越多被用於獨立的、大型項目的開發。
Python的發展趨勢
上圖是2020年9月的Tiobe編程社區指數(它是編程語言流行度的指標),全球編程語言熱度排行榜。如果感覺上圖的排行不夠直觀,可以看下面這張柱狀圖↓
從中我們能看出Python已經超越C++和C#,強勢位列第三,當之無愧的解釋型語言領頭羊。
解釋型語言是指在運行程序的時候才翻譯代碼,專門有一個解釋器去進行翻譯,每個語句都是執行的時候才翻譯。解釋型語言缺點是運行速度會比較低,依賴解釋器,優點是跨平台性好。
而時至今日,計算機的硬體性能已經得到數量級的提高,計算能力不再是限制編程語言的最重要的因素,敏捷開發成為生產環境下對語言選擇的重要因素,Python很好的滿足了這一點,從而得到快速發展。
Python語言的特性
1、簡單易學、明確優雅、開發速度快
簡單易學:與C和Java比,Python的學習成本和難度曲線低了很多,更適合新手入門,是自底向上的技術攀爬路線。先訂個小目標爬個小山,然後再往更高的山峰前進。而不像C和JAVA光語言學習本身,對於很多初學者來說就像珠穆朗瑪峰一樣高不可攀。
明確優雅:Python的語法非常簡潔,代碼量少,非常容易編寫,代碼的測試、重構、維護等都非常容易。一個小小的腳本,用C可能需要1000行代碼、用JAVA可能要幾百行,但是用Python往往只需要幾十行就能實現!
開發速度快:當前互聯網企業的生命線是什麼?產品開發速度!如果你的開發速度不夠快,在你的產品推出之前別人家的產品已經上線了,你也就沒有生存空間了,這里的真實例子數不勝數。那麼,Python的開發速度說第二沒人敢稱第一!(不歡迎辯論^_^)
2、 跨平台、可移植、可擴展、解釋型、面向對象的動態語言
跨平台:Python全面支持Windows、Linux和MAC os等主流操作系統。
跨平台是指:使用不同的操作系統開發程序、運行程序,不用修改代碼。
可移植:代碼通常不需要多少改動就能移植到別的平台上使用。
可擴展:Python語言本身由C語言編寫而成的,你完全可以在Python中嵌入C,從而提高代碼的運行速度和效率。你也可以使用C語言重寫Python的任何模塊,從根本上改寫Python。
解釋型:Python語言在執行過程中由解釋器逐行分析,逐行運行並輸出結果。
面向對象:Python語言具備所有的面向對象特性和功能,支持基於類的程序開發。
動態語言:在運行時可以改變其結構。例如新的函數、對象、甚至代碼可以被引進,已有的函數可以被刪除或是其他結構上的變化。動態語言非常具有活力。
3. 「內置電池」,大量的標准庫和第三方庫
Python為我們提供了非常完善的基礎庫,覆蓋了系統、網路、文件、GUI、資料庫、文本處理等方方面面,這些是隨同解釋器被默認安裝的,各平台通用,你無需安裝第三方支持就可以完成大多數工作,這一特點被形象地稱作「內置電池(batteries included)」。
4. 社區活躍,貢獻者多,互幫互助
技術社區的存在就相當於程序員手中的指南針,沒有指南針,很多時候,碰到了問題,就像無頭的蒼蠅只能到處亂飛,最終在茫茫的海洋中轉暈致死。技術社區可以給我們對語言的學習和使用提供巨大的幫助,無論是前期的學習,還是日後的工作,只要有問題,技術社區的大牛都可以幫我們解決,有這些助力,可以幫我們更好地了解、學習和使用一門語言。技術社區同時還推動Python語言的發展方向,功能需求,促使公司企業更多的使用Python語言,招聘Python程序員。
5. 開源語言,發展動力巨大
Python是基於C語言編寫的,並且使用GPL開源協議,你可以免費獲取它的源代碼,進行學習、研究甚至改進。眾人拾柴火焰高,有更多的人參與Python的開發,促使它更好的發展,被更多的應用,形成良性循環。Python為什麼會越來越火就是因為它的開放性,自由性,聚起了人氣,形成了社區,有很多人在其中做貢獻,用的人越來越多,自然就提高了市場佔有率,企業、公司、廠家就不得不使用Python,提供的Python程序員崗位就越來越多,這就是開源的力量。
⑻ 如何使Python嵌入C++應用程序
Python容易擴展和嵌入。Python提供的許多標准模塊支持C或者C++介面。Python和C可以一起工作,它可以嵌入到C或者C++的應用程序當中,因此可用Python語言為應用程序提供腳本介面,由於支持跨語言開發。
可用Python設計概念化應用程序,並逐步移植到C,使用前不必用C重寫應用程序。(Jython使Python可以和Java一起工作,使開發者可以在Python裡面調Java的包,也可以在Java裡面使用Python的對象。還有更妙的,由於Jython的解釋器完全用Java編寫,因此可以在支持Java的任何平台上部署Python程序,甚至WEB瀏覽器也可以直接運行Python腳本。)
提出問題在某個C++應用程序中,我們用一組插件來實現一些具有統一介面的功能,我們使用Python來代替動態鏈接庫形式的插件,這樣可以方便地根據需求的變化改寫腳本代碼,而不是必須重新編譯鏈接二進制的動態鏈接庫。Python強大的功能足以勝任,但是有一些操作系統特定的功能需要用C++來實現,再由Python調用。所以,最基礎地,我們需要做到:
1. 把Python嵌入到C++應用程序中,在C++程序中調用Python函數和獲得變數的值;
2. 用C++為Python編寫擴展模塊(動態鏈接庫),在Python程序中調用C++開發的擴展功能函數。
⑼ 怎樣把Python代碼嵌入到C程序
步驟1:安裝Python開發包
由於需要訪問Python/C API,首先安裝Python開發包。
在Debian,Ubuntu或Linux Mint中:
在CentOS,Fedora或RHEL中:
安裝成功後,Python頭文件在/usr/include/python2.7。根據Linux發行版的不同,確切的路徑可能是不相同的。例如,CentOS 6中是/usr/include/python2.6。
步驟2:初始化解釋器並設置路徑
C中嵌入Python的第一步是初始化Python解釋器,這可以用以下C函數完成。
初始化解釋器後,需要設置你的C程序中要導入的Python模塊的路徑。例如,比如你的Python模塊位於/usr/local/moles。然後使用以下C函數調用來設置路徑。
步驟3:數據轉換
C中嵌入Python最重要的方面之一是數據轉換。從C中傳遞數據到Python函數,需要首先將數據從C數據類型轉換到Python數據類型。Python/C API提供各種函數來實現這。例如,轉換C字元串到Python字元串,使用PyString_FromString函數。
另外一個類似函數PyInt_FromLong,將C中long數據類型轉換為Python int。每個Python/C API函數返回一個PyObject類型的引用。
步驟4:定義一個Python模塊
當你想嵌入Python代碼到另一種語言如C,該代碼需要被寫成Python模塊,然後用另一種語言「導入」。所以讓我們來看看如何在C中導入Python模塊。
為了進行說明,我們實現一個簡單的Python模塊例子如下:
以上的Python函數有一個字元串作為參數並返回兩個重復的字元串。例如,如果輸入字元串是「cyberpersons」,該函數返回'cyberpersonscyberpersons'。此模塊文件命名為「printData.py」並將它放在前面聲明的Python模塊目錄中(/usr/local/moles)。
步驟5:載入一個Python模塊
現在你已經定義了Python模塊,是時候在C程序中載入它了。導入模塊的C代碼看起來像這樣:
步驟6:構建函數的參數
當載入一個模塊時,可以調用模塊中定義的Python函數。通常,我們需要傳遞一個或多個參數到一個Python函數。我們必須構建一個Python元組對象,它包括Python函數中的參數。
在我們的例子中,printData函數定義帶一個參數的模塊。因此,我們構建一個大小是一的Python元組對象如下。我們可以使用PyTuple_SetItem設置元組對象的每個項。
我們已經成功構建一個參數傳遞到函數調用,是時候從C程序調用python函數了。
步驟7:調用Python函數
一旦成功創建Python元組對象作為函數參數,我們可以調用一個帶參數的Python函數。為此,通過使用PyObject_GetAttrString首先獲得模塊中定義的函數的引用,然後使用PyObject_CallObject調用該函數。例如:
步驟8:錯誤檢查
避免運行時錯誤的常見方法是檢查函數的返回值並根據返回值採取適當的行動。類似於C程序中的全局變數errno,Python/C API提供一個全局指示符,它報告最後發生的錯誤。當Python/C API函數失敗,全局指示符設置為指示錯誤,並且PyErr_Print可以用於顯示相應的人類可讀的trackback。例如:
在你的應用程序中,你可以輕松地將各種錯誤檢查。
這里是完整的C程序,它如本教程描述的嵌入Python代碼。
步驟9:編譯和執行
保存以上代碼到finalCode.c,並且鏈接Python庫(-lpython2.7)編譯該代碼。根據發行版的不同,可能使用不同的版本(例如,-lpython2.6)。
⑽ python能做嵌入式開發嗎
一般不支持,這是面向對對象的,嵌入式都用c或c++,這種可以直接操作寄存器的語言