ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

burgled-batteries をどのように利用するかを考えてみる。

Pythonのプログラムをどう動かすか。 ちょいと整理してみる。

github.com

概要

ストーリーとしては以下のような感じでしょうか。 このストーリーで実装してみます。

  1. Python でプログラムを書く。 書いたプログラムはファイルに保管しておく。
  2. burgled-batteries でそのファイルを読み込む。
  3. Pythonの関数をCL上で定義する。
  4. 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経由でデータの受け渡しすれば良いのでなんとかなるかな。