2010-10-23 168 views
4

存在一個爲我的Python應用程序提供完美功能的Perl模塊。 有什麼辦法讓我使用它? (這是複雜,它會帶我一個月移植)如何使用Python中的Perl模塊?

我不希望有生成一個子進程在每次使用,因爲我需要它幾十萬次(它是一種特定類型的數據解析器)。

感謝您的建議。

編輯:問的模塊。這是Mail::DeliveryStatus::BounceParser。它將郵件傳遞狀態通知與可能指示退回郵件的字符串列表進行匹配。 (它運行DSN身體/頭,通過正則表達式的質量以及其他測試。這是一個嚴重的真棒模塊。)

+1

這取決於解析器接受和生成什麼樣的數據,但是您可以在其上編寫一個簡單的Perl包裝器,通過套接字/任何方式進行通信,並以這種方式來回發送數據。 – 2010-10-23 03:50:56

+0

什麼是模塊?可能有一個python模塊可以滿足你的需求。 – 2010-10-23 04:33:28

回答

5

我不知道這是否仍然有效,但PyPerl可能是你的興趣

還是應該有python中大多數數據解析器的支持。如果你可以指向你正在查看的解析器,這將是一件好事。

或者,您可以使用該perl模塊創建一個完整的進程,並使用IPC,套接字機制來從您的python和perl進程來回傳遞數據和結果。

+0

謝謝Func先生!我要麼採用tcp套接字方式,要麼將其放入後綴策略服務器中。感謝您的回答! – mikewaters 2010-10-23 15:59:06

2

我知道你可以在Perl中使用Python Inline::Python但這不是你的問題。也許在Python中有類似的功能。也許像perlmodule

+0

這個答案(perlmodule)當然應該被後人認可,儘管得到複選標記的答案更適合我的特殊情況。人們請upvote! – mikewaters 2010-10-23 16:04:37

-3

我不想爲每種用法都產生一個子進程,因爲我需要它幾十萬次(它是一種特定類型的數據解析器)。

糟糕的政策。基本的Linux shell一直都在執行這種類型的進程。避免進程產卵是一個不好的限制。

但是,你可以平凡地做到這一點。

python prepare_data.py | perl my_magic_module.pl | python whatever_else.py 

環繞你的魔法模塊中一個簡單的Perl腳本,它從標準輸入讀取,確實神奇的東西,寫到stdout。

將Python分成兩部分:在調用perl之前完成的部分和調用perl之後完成的部分。 (a)同時執行所有三個步驟,(b)不分叉大量進程。

這個,BTW,也會使用你擁有的每個核心。

1

我想用HTTP :: Server :: Simple來創建一個本地Web服務。那麼你只需要對此進行查詢。這仍然是一個外部過程,但它只是一個。