Pythonのプログラムをどう動かすか。 ちょいと整理してみる。
概要
ストーリーとしては以下のような感じでしょうか。 このストーリーで実装してみます。
- Python でプログラムを書く。 書いたプログラムはファイルに保管しておく。
- burgled-batteries でそのファイルを読み込む。
- Pythonの関数をCL上で定義する。
- CL上から定義した関数を実行する。
実装
Python でプログラムを書く。
# coding: utf-8 # HelloWorld.py def test_func(name): return "Hello world! " + name
burgled-batteries でそのファイルを読み込む。
> (ql:quickload :burgled-batteries) (:BURGLED-BATTERIES) > (in-package :burgled-batteries) #<PACKAGE "BURGLED-BATTERIES"> > (startup-python) ; No value > (import "sys") 0 > (run "sys.path.append('/home/someml/junk')") ; No value > (import "HelloWorld") 0 > (run "HelloWorld.test_func('yanqirenshi')") "Hello world! yanqirenshi"
Pythonの関数をCL上で定義する。
> (defpyfun "HelloWorld.test_func" (name))
HELLOWORLD.TEST_FUNC
CL上から定義した関数を実行する。
> (helloworld.test_func "yanqirenshi") "Hello world! yanqirenshi"
おわり
想像以上にすんなり出来ました。 これでPythonでプログラムを書けば寄さそう。
あとは引数の引き渡しと、戻値の受け取りで他のデータタイプで上手に出来れば問題なさそう。
FFIは文字コードまわりで躓くこともよくあるし。
まぁ難しい場合DB経由でデータの受け渡しすれば良いのでなんとかなるかな。