LuaPy 経由で使う汎用 Python サブ

2016-08-13 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、0、 1、0、0、0、0(40)で、換算ポイント 87pt 。
「Perl」「C言語」「化学業界」「硝子業界」「グルコサミン」「Python」、
「Firefox」bg値変動。「FM COCOLO」「e-radio」「FM青森」変化無し。
・-・ - -・

さて、本文。

先月下旬(2016-07-25)の記事「LuaPy:matplotlib.pyplot 実例
では、
“Main_LuaPy_plt.gsl”から、
“LuaPy_1.dll”経由で、
専用の“Sub_LuaPy_plt.py”を作った。


そこで、
任意のメインプログラム(~.gsl)から
“LuaPy_1.dll”経由で、
使える、
汎用の“Sub_LuaPy_Gen.py”を作ることにした。

この Python プログラムには、
“Exec”関数一つだけ。

それは、
受け取った文字列を、“exec”文で実行するだけ。
受け取る文字列は配列に格納されていて、
その配列サイズも受け取る。

つまり、こんなコード:
# -*- coding: utf-8 -*-
# -------------------------- Sub_LuaPy_Gen.py
import sys
w=sys.path
for k in range(len(w)):
if w[k].find('Lib')>0: ww=w[k]; break
sys.path.append(ww+'/lib-tk')

import ctypes as ct
import numpy as np
def IntA(x):
return ct.cast( x, ct.POINTER(ct.c_long) )
def np_data( x ):
return ct.cast( id(x), ct.POINTER(ct.c_long) ) [2]
#############################################

def Exec( n, p ):
IT = IntA( p )

k=0
while k if IT[k] != 0:
s = ct.create_string_buffer(255)
w=ct.cdll.msvcrt.memcpy(s,IT[k],255)
s0 = s.value
exec(s0)
k+=1

return 0
ですね。

それで、
これを使う、テスト・メインの例は、・・・・・
----- test_Main_Sub_LuaPy_Gen.gsl
function split( str, sep )
if sep == nil then sep = '%s' end
local t={} ; i=1
for str in string.gmatch( str, "([^"..sep.."]+)") do
t[i] = str i=i+1
end
return t
end
--------------------------------------------------------
charA = |x| ffi.cast( 'char*', x )
Int = |x| ffi.cast( 'int32_t', x )
function setITk(s) IT[k]=Int(charA(s)); k=k+1 end

LuaPy = ffi.load('LuaPy_1')
ffi.cdef[[
int PyIni( char* ); // Pyファイル名
int PyFun( char*, int, void* ); // 関数名、Count、領域
int PyFin( ); // Pyファイナライズ
]]
IT = ffi.new( 'int32_t[50]' ) ---------- インタフェース情報

LuaPy.PyIni( charA('Sub_LuaPy_Gen') ) -- Python / ファイル 初期化

------------------------ グラフデータ 動作確認程度 ---------
IT[40] = Int( matrix.vec{ 1, 2, 3, 4 }.data ) -- X座標値
IT[41] = Int( matrix.vec{ 1, 5, 3, 4 }.data ) -- Y座標値1
IT[42] = Int( matrix.vec{ 1, 4, 2, 5 }.data ) -- Y座標値2

------------------------ Python スクリプト 40 行未満 -------
Py = split( [[import matplotlib.pyplot as plt
xx=4
x = np.zeros( xx, dtype=np.float )
y = np.zeros( xx, dtype=np.float )
z = np.zeros( xx, dtype=np.float )
_=ct.cdll.msvcrt.memcpy( np_data(x), IT[40], xx*8 )
_=ct.cdll.msvcrt.memcpy( np_data(y), IT[41], xx*8 )
_=ct.cdll.msvcrt.memcpy( np_data(z), IT[42], xx*8 )

plt.title( 'Title', fontsize=18, fontname='serif' )
plt.xlabel( 'X_Axis', fontsize=12, fontname='serif')
plt.ylabel( 'Y_Axis', fontsize=12, fontname='serif')

plt.plot( x, y, ls='--', c='#FF0000' )
plt.plot( x, z, ls='-', lw=4 )
plt.show()
]], '\n')
-------------------------------------------------------------
k=0
for j=1,#Py do setITk( Py[j] ) end
LuaPy.PyFun( charA('Exec'), k, IT )

LuaPy.PyFin()
これで行ける?


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160702
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク