سؤال

لقد اكتشفت للتو http://code.google.com/p/re2., ، مكتبة واعدة تستخدم طريقة مهملة طويلة (طومسون NFA.) لتنفيذ محرك تعبير منتظم يمكن أن يكون أوامر من الأقواس بشكل أسرع من المحركات المتاحة من AWK أو PERL أو Python.

لذلك قمت بتنزيل الكود وفعل المعتاد sudo make install شيء. ومع ذلك، فإن هذا الإجراء قد فعل أكثر قليلا من إضافة /usr/local/include/re2/re2.h إلى نظامي. يبدو أن هناك بعض `` ``file in addition, but then what is it with thisتمديد.

أود استخدام RE2 من Python (Python 3.1 المفضل) وكان متحمس لرؤية الملفات مثل make_unicode_groups.py في Distroo (ربما استخدمت للتو أثناء عملية البناء؟). ومع ذلك لم يتم نشر ذلك على جهازي.

كيف يمكنني استخدام RE2 من بيثون؟


تحديث أشار شخصان صديقان إلى أنه يمكنني محاولة إنشاء ملفات DLLS / * .SO من المصادر ثم استخدم بيثون ctypes مكتبة للوصول إلى تلك. هل يمكن لأي شخص أن يقدم مؤشرات مفيدة كيفية القيام بذلك؟ أنا دائما جاهزة هنا، خاصة مع الجزء الأول (بناء ملفات * .so).


تحديث لقد نشرت أيضا هذا السؤال (سابقا) إلى مجموعة مطوري RE2, ، دون الرد حتى الآن (إنها مجموعة صغيرة)، واليوم إلى (أكثر اكتظاظا بالسكان إلى حد ما) comp.lang.py. مجموعة -Thread هنا-. وبعد الأمل هو أن الناس من مختلف الزوايا يمكنهم الاتصال بعضهم البعض. تخميني هو أن الشخص الماهر يمكن أن يفعل ذلك في غضون ساعات قليلة خلال 20٪ ينتمي إلى 20٪ - أوقات Google-very-very؛ سوف تربطني منذ أسابيع. هل هناك أداة للغباء تلقائيا في C ++ إلى أي نكهة ج التي تحتاج إلى أن تكون بيثون قادرا على الاتصال؟ ثم ربما الحصول على نتيجة قابلة للحياة يمكن تقليلها إلى أداة ذكية.

(rant) لماذا هذا صعب للغاية؟ للتفكير في أنه في عام 2010، لا يزال بإمكاننا الحصول على قطعنا الوفيرة من البرامج فقط تتحدث مع بعضنا البعض. هذا هو حاجز الطريق الذي كلما أردت معالجة بعض كود C من Python، يجب عليك دائما Cruft Bits Linking. يتطلب هذا الكثير من العمل، ولكن فقط يوفر وحدة امتداد محددة لإصدار رمز C وإصدار Python، لذلك عمره سريعا. (/ rant) هل سيكون من الممكن تشغيل الأشياء هذه في عمليات منفصلة (قل إذا كان لدي re2 قابلة للتنفيذ يمكن أن ينتج نتائج للبيانات التي تأتي في ON، subprocess/Popen/communicate())? (لا ينبغي أن يكون هذا أداة سطر الأوامر نقية تستلزم فتح عملية في كل مرة يتم فيها حاجة إليها، ولكن هناك عملية واحدة تعمل بشكل مستمر؛ ربما هناك مغلفة من "شيطان" كود C.

هل كانت مفيدة؟

المحلول

وضع ديفيد ريسين معا غلاف بيثون ل RE2. ليس لديه كل وظيفة وحدة إعادة بيثون، لكنها بداية. انها متوفرة هنا: http://github.com/facebook/pyre2..

نصائح أخرى

ممكن نعم، لا. النظر إلى RE2.H، هذه مكتبة C ++ مكشوفة كصف. هناك طريقتان يمكنك استخدامها من بيثون.

1.) كما تقول توماس، تجميعها ك dll / لذلك واستخدام ctypes. من أجل استخدامه من بيثون، ستحتاج إلى لف الكائن في الأزمة والأساليب في وظائف C أسلوب C. لقد فعلت ذلك في الماضي مع CTTYPES عن طريق أقام الوظائف التي تمر مؤشرا إلى الكائن حولها. تقوم وظيفة "Init" بإرجاع مؤشر الفراغ إلى الكائن الذي يتم تمريره في كل مكالمة أسلوب لاحقة. فوضوي جدا في الواقع.

2.) لفها في وحدة بيثون حقيقية. مرة أخرى ستحتاج تلك الوظائف التي يتعرض لها لبثون إلى أن تكون خارجية "C". خيار واحد هو استخدام boost.python., هذا من شأنه أن يخفف من هذا العمل.

جرعة كبيرة مقابض C ++ (على عكس ctypes)، لذلك قد يكون أكثر تباينا لاستخدامه.

يمكنك محاولة إنشاء RE2 في DLL / لذلك واستخدم CETYPES لدالات الاتصال من DLL / SO. ربما تحتاج إلى تحديد نقاط الدخول الخاصة بك في DLL / SO.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top