aardio 文档
aardio 范例:调用 aardio 对象
//调用 aardio 对象
import winex;
import console.int;
import py2;
//可以这样预先指定 Python 全局变量
py2.main.console = py2.export(console);////用 py2.export(com) 直接将 aardio 对象完整导入 Python
var pyCode = /**
def testPy(winex):
# 在 Python 里直接使用 aardio 对象,简单得就像在 aardio 里调用 aardio 对象
console.log("在 Python 里调用 aardio 库函数")
# 还能支持 aardio 创建的迭代器
for(hwnd,title,threadId,processId) in winex.each():
console.log(title)
**/
//执行 Python 代码,Python 2.7 的编码问题很坑很坑,这里用 execRaw 取消编码转换
py2.execRaw( pyCode );
//调用 Python 函数
py2.main.testPy(
py2.export(winex) //也可以通过参数将 aardio 对象导出给 Python
);
/**details(重要说明)
一、简介
-----------------------------------------------------------
当 py2.export() 作为对象构造函数使用时,
可用于导入参数指定的 aardio 对象为 Python 对象。
这种「代理对象」在 Python 中将保持对原始 aardio 对象的引用,也就是传址而非传值。
二、解决了什么问题
-----------------------------------------------------------
aardio 在与 Python 交互时,
默认除了布尔值、浮点数值、小于53位的整数值,布尔值转换为纯 aardio 值以外。
在 aardio 这些对象存为 pyObject,并保留对原始 Python 对象的引用。
而 aardio 对象在自动转换为 Python 对象时,
默认是传值而非传址,Python 中不保留对 aardio 对象的引用。
py2.export 的特别之处在于可以导出 aardio 模块到 Python,
在 Python 中引用与操作原始的 aardio 对象。
例如:
py2.export.aardio = {
exportFunction = function(){
}
}
然后可以在 Python 中 import aardio,调用这个模块的所有成员函数。
三、py2.export( aardioObject ) 使用要点
-----------------------------------------------------------
py2.export( aardioObject )
可以导出 aardio 中的 table,cdata,class,function 等 aardio 对象,
也可以自动导出 aardio 迭代器,适用于 Python 的 for 语句(aardio 迭代器在 Python 中返回 tuple 而非单个值)
对于整型数值 py2.export( number ) 默认转换为 Python 中的整型,而非浮点数。
其他类型(例如字符串) py2.export 不作转换直接返回。
Python 调用导出函数的返回值也会由 py2.export() 再次导出 。
Python 调用 aardio 导出函数的参数会自动调用 parseValue() 解析为纯 aardio 值。
四、使用限制
-----------------------------------------------------------
注意 py2.export 只能在 Python 启动线程中使用,
这是 Python 的限制与 aardio 无关!
aardio 可以支持真多线程,
也提供了 py2.lock 简化了 Python 全局锁操作,支持除 py2.export 以外的接口。
但是:py2.export 不支持多线程。
在非 Python 主线程下,py2.export 为 null 值,
使用 py2.mainThread 也可以检测是否 Python 主线程,
其实 Python 因为有全局锁 —— 无法实现真正的多线程,
调用 process.python 创建多进程来替代多线程可能更方便一些。
end details**/
Markdown 格式