Embedded Python

مقدمه

سلام، ممکن است شما هم مثل من دوست داشته باشید برنامه های کاربردی ای که ایجاد می کنید به آسانی قابل توسعه توسط دیگران (حتی افراد غیر برنامه نویس = کاربران عادی) باشد، بدون اینکه کاربر نیازی به فهمیدن سورس کد برنامه ی شما و تغییر آن داشته باشد.

ساده ترین و تمیزترین راه حلی که به ذهن من می رسد، استفاده از Embedded Python می باشد. یعنی اینکه:

  1. برنامه ی کاربردی شما یک API (تشکیل شده از یک سری تابع) را در اختیار کاربر قرار دهد.
  2. کاربر بتواند با استفاده از زبان Python و API شما عمل مورد نظر خود را وصف کند و ذخیره کند.
  3. سپس با استفاده از انتخاب کردن یک گزینه ی منو بتواند آن را اجرا کند.



سوالی که ممکن است به ذهن شما برسد این است که ”چرا Python؟”:

  • چون زبان بسیار آسانی می باشد و قابل یادگیری توسط اکثر افراد غیر برنامه نویس می باشد.
  • کد های ایجاد شده توسط این زبان بسیار تمیز و قابل فهم می باشند
  • یک سری کتابخانه برای زبان ++C دارد که امکان اجرای Script ها را توسط برنامه های ایجاد شده توسط ++C را به برنامه نویس می دهد.
  • استفاده از این کتابخانه بسیار آسان می باشد.



و سوال اساسی تری که ممکن است به ذهن شما برسد: ”Python چیست؟



در ادامه آشنایی مختصری با Embedded Python خواهیم داشت.

راهنمای عملی

گام اول، قرار دادن Header فایل ها و فایل های کتابخانه ای Python در مسیر مناسب می باشد. من که از سیستم عامل ویندوز و کامپایلر MingW استفاده می کنم، کارهای زیر را انجام دادم:

  1. فایل های موجود در C:\Python25\include را به مسیر C:\MingW\include\python کپی کردم.
  2. فایل های موجود در C:\Python25\libs را به مسیر C:\MingW\lib کپی کردم.

(گمان کنم کارهای بالا هنگام استفاده از کامپایلر GCC در سیستم عامل لینوکس نیاز نیست.)



ساده ترین برنامه ی ++C ای که یک دستور ساده ی Python را اجرا می کند:

#include <python/Python.h>
 
int main()
{
   Py_Initialize();
   PyRun_SimpleString("print 'With friends around me!'");
   Py_Finalize();
   return 0;
}

برای کامپایل کردن این برنامه که با اسم a.cpp ذخیره شده است، از دستور زیر اجرا کنید:

g++ a.cpp -lpython25

گمان کنم برنامه ی بالا به اندازه ی کافی قابل فهم باشد.

تنها نکته ای که در رابطه با کد بالا به ذهنم می رسد این است که اگر می خواهد Script ذخیره شده در فایلی را اجرا کنید، به جای دستور PyRun_SimpleString از دستور PyRun_SimpleFile استفاده کنید.



حال، برای تعریف کردن تابع هایی از برنامه ی خودتان که قابل دسترسی در Script های Python باشند، به صورت زیر عمل کنید:

#include <python/Python.h>
#include <iostream>
using namespace std;
 
int colour = 0;
 
PyObject* DrawLine(PyObject* self, PyObject* pArgs)
{
   int x1, y1, x2, y2;
   PyArg_ParseTuple(pArgs, "llll", &x1, &y1, &x2, &y2);
   cout << "Drawing a Line from (" << x1 << "," << y1 << ") to (" << x2 << "," << y2 << ")" << endl;
   Py_INCREF(Py_None);
   return Py_None;
}
 
PyObject* SetColour(PyObject* self, PyObject* pArgs)
{
   PyArg_ParseTuple(pArgs, "l", &colour);
   Py_INCREF(Py_None);
   return Py_None;
}
 
PyObject* GetColour(PyObject* self, PyObject* pArgs)
{
   return PyInt_FromLong(colour);
}
 
static PyMethodDef paintMethods[] = {
 {"DrawLine", DrawLine, METH_VARARGS, "Draws a Line"},
 {"SetColour", SetColour, METH_VARARGS, "Sets the Colour"},
 {"GetColour", GetColour, METH_VARARGS, "Gets the Colour"},
 {0,0,0,0}
};
 
int main(int argc, char *argv[])
{
   Py_Initialize();
   Py_InitModule("paint", paintMethods);
   PyRun_SimpleString("import paint");
   PyRun_SimpleString("paint.DrawLine(1,1,100,100)");
   PyRun_SimpleString("paint.SetColour(4)");
   PyRun_SimpleString("print 'The Colour is:',paint.GetColour()");
   Py_Finalize();
  return 0;
}

  • {0,0,0,0} در paintMethods مشخص می کند که به آخر آرایه رسیده ایم.
  • تابع هایی که می خواهید قابل اجرا در Script ها باشند حتما باید مقداری از نوع *PyObject برگرداند و دو آرگومان از نوع *PyObject بپذیرد.
  • توابعی برای تبدیل متغیر های ++C به نوع *PyObject وتبدیل *PyObject به متغیر های ++C وجود دارد. برای آشنایی با آن ها به لینک 1 و لینک 2 مراجعه کنید.
  • برای بدست آرگومان های پاس شده به تابع از PyArg_ParseTuple استفاده کنید. و برای آشنایی با طرز استفاده از آن به لینک 3 مراجعه کنید.

و در آخر، برای آشنایی دقیق تر با جزئیات Embedded Python به لینک 4 و لینک 5 مراجعه کنید.

استفاده از کتابخانه ی Boost

مراجعه کنید به http://wiki.python.org/moin/boost.python/GettingStarted.

(یکی اینجا رو بنویسه!)

استفاده از wxScript

مراجعه کنید به http://wxcode.sourceforge.net/components/wxscript/.

(یکی اینجا رو بنویسه!)

 
embedded_python.txt · Last modified: 2008/01/01 03:58 by hadi
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki