Python Extension Programming with C

Bir çox Python paketləri(modulları) C və ya C++ dilləri ilə yazılır.Bu bəhsdə giriş üçün python paketi hazırlayacağıq.

İlk əvvəl iki fayl yaradaq first.c və setup.py

(terminaldan

$ touch first.c

$ touch setup.py

yolu ilə də yarada  bilərik)

Screenshot from 2017-06-29 13-33-46

first.c faylını açırıq aşağıdakı kodları fayla əlavə edirik

Screenshot from 2017-06-29 13-40-09

Kodlara açıqlama verək.

Kökdən python.h faylını include edirik.Daha sonra istifadə olunacaq funksiyamızı hazırlayırıq

integer(PyObject* self, PyObject* args)
{
const int* input_integer;
double reg;

if (!PyArg_ParseTuple(args, “i”, &input_integer))
return NULL;

printf(color_blue “Output : %d\n”,input_integer);
Py_RETURN_NONE;
}

————————————————————————————————————

funksiyamız integer adı ilə istifadə olunacaq.tam ədədləri alacağından veriləni pointer olaraq aşağıdakı şəkildə ifadə edək.

const int* input_integer;

Funksiyanın alacağı dəyər integer olduğundan

if (!PyArg_ParseTuple(args, “i”, &input_integer))

“i” -ilə ifadə etdik(str üçün -s float üçün f olaraq yazılır)

istifadəçinin verdiyi integer dəyəri mavi rənglə çap edək.

printf(color_blue “Output : %d\n”,input_integer);

istifadə edəcəyimiz funksiyanın listəsini tərtib edək

static PyMethodDef show_funcs[] =
{
{“integer”,integer, METH_VARARGS, “”},
{NULL, NULL, 0, NULL}
};

və çağrılacaq funksiyalar üçün əsas predmeti show parametri ilə tərtib edək

PyMODINIT_FUNC
initshow(void)
{
(void) Py_InitModule(“show“, show_funcs);
}

setup.py faylına daxil oluruq

Screenshot from 2017-06-29 13-52-24

Yuxarıdakı kodları fayla əlavə etdikdən sonra yaddaşa veririk və ardından terminalı açırıq

terminaldan faylları açdığımız qovluğa daxil olub

xaos@techaz:~/Programlar/c/C_extension$ sudo python setup.py install yazırıq

Screenshot from 2017-06-29 13-55-14

Və paketimiz show adı ilə python2.7 qovluğu altına yerləşdi.

pythonu çağırırıq

Screenshot from 2017-06-29 13-58-39

paketə dir(show) ilə baxdıqda bir ədəd funksiyamız-integer olduğunu görürük.funksiyadan istifadə edək

Screenshot from 2017-06-29 14-01-56

Sonuncu veriləni string cinsində yazsaqda python bizə xəta olduğu məlumatını verdi.Biz integer funksiyasını yalnız tam ədədlər üçün tərtib etmişik

>> from show import*
>>> integer(12)
Output : 12
>>>

>> integer(45+45)
Output : 90
>>>

Paketimizə string cinsi üçün funksiya əlavə edək

first.c faylına daxil olaraq kiçik dəyişikliklər edək

string(PyObject* self, PyObject* args)
{
const int* input_string;

if (!PyArg_ParseTuple(args, “s”, &input_string))
return NULL;
printf(color_green “Output : \n%s\n”,input_string);

Py_RETURN_NONE;

}

static PyMethodDef show_funcs[] =
{
{“integer”,integer, METH_VARARGS, “”},
{“string”,string, METH_VARARGS, “”},
{NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC
initshow(void)
{
(void) Py_InitModule(“show”, show_funcs);
}

 

Bütövlükdə kodlarımız

#include <Python.h>
#define color_blue “\x1b[34m”
#define color_green “\x1b[32m”
static PyObject*
integer(PyObject* self, PyObject* args)
{
const int* input_integer;
if (!PyArg_ParseTuple(args, “i”, &input_integer))
return NULL;
printf(color_blue “Output : \n%d\n”,input_integer);
Py_RETURN_NONE;
}
string(PyObject* self, PyObject* args)
{
const int* input_string;
if (!PyArg_ParseTuple(args, “s”, &input_string))
return NULL;
printf(color_green “Output : \n%s\n”,input_string);
Py_RETURN_NONE;
}
static PyMethodDef show_funcs[] =
{
{“integer”,integer, METH_VARARGS, “”},
{“string”,string, METH_VARARGS, “”},
{NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC
initshow(void)
{
(void) Py_InitModule(“show”, show_funcs);
}

Yaddaşa verib terminaldan

$ sudo python setup.py install

yazırıq

daha sonra python -u çağırırıq

>> import show
>>> dir(show)
[‘__doc__’, ‘__file__’, ‘__name__’, ‘__package__’, ‘integer’, ‘string’]
>>> from show import*
>>> string(“Salam Azerbaijan”)
Output :
Salam Azerbaijan
>>> string(“****”*12)
Output :
************************************************
>>> string(“Hello\n Azerbaijan”)
Output :
Hello
Azerbaijan
>>> string(“Hello \t\t\nAzerbaijan”)
Output :
Hello
Azerbaijan
>>> string(“Hello \t\t\Azerbaijan”)
Output :
Hello \Azerbaijan
>>> string(“Hello \vAzerbaijan”)
Output :
Hello
Azerbaijan
>>> integer(12)
Output :
12
>>> integer(12*12)
Output :
144
>>> print integer(12)
Output :
12
None
>>> print integer(12*12)
Output :
144
None
>>> print integer
<built-in function integer>
>>> i=144
>>> integer(i)
Output :
144
>>> i=”System”
>>> for v in i:
… string(v)

Output :
S
Output :
y
Output :
s
Output :
t
Output :
e
Output :
m
>>>

 

 

How to run Atmel Studio on Ubuntu

Proqramı yükləmək üçün ilk öncə sistemə wine yükləyirik

terminaldan

$ sudo apt-get install wine

$ wget http://www.kegel.com/wine/winetricks

$ bash winetricks

çağıraraqaşağıdakı ardıcıllıqla M.windows mühiti üçün bəzi komponentləri yükləyirik

Select the default wineprefix

OK

Install a Windows DLL or components

OK

açılmış pəncərədən aşağıdakı faylları seçib Ok düyməsini sıxırıq

comctl32
gdiplus
ie6
mdac27
mdac28
msls31
msxml3
pngfilt
vcrun2005
vcrun6sp6
vcrun6
wsh56vb
wsh57

xətasıs yüklədikdən sonra Atmel studio nu sistemə iki yolla yükləyə bilərik -Online(vebinstaller) offline( studio.exe)

Screenshot from 2017-06-24 15-49-44

Yüklədiyimiz proqramı

wine AvrStudio4Setup.exe terminala yazaraq və ya üzərində sağ düyməni basıb açılan pəncərədən run application vith wine seçirik.