本库已封装 Python 解释器的检查、下载和安装,通常不需要自行下载或解压 Python 安装包。
例如设置 process.python.version = "3.12.10" 后调用 process.python.exec(""),
缺少解释器时会自动准备该版本;只准备解释器、不执行代码可调用 process.python.checkPath()。 要特别注意如果 process.python.path 的值为 "python.exe",
则调用系统安装的 Python.exe (即使没有添加到环境变量也可以支持)。
选择系统解释器时只比较主、次版本号:主版本相同,次版本等于或大于指定值,优先匹配指定主、次版本。
不检查补丁号,因此不保证精确版本或补丁级别的最低版本。
如果系统未安装符合条件的 Python ,则会自动安装 process.python.version 指定版本的 Python。 如果 process.python.path 为其他值,则表示使用嵌入版(embed)版 Python。
嵌入版 Python 完全独立,与系统安装的 Python 不相关,也不会共用模块。
嵌入版 Python 可方便的与 EXE 一起发布 (可在发布完成界面一键转换为独立 EXE 文件,兼容 64/32 位)。 如果嵌入版 Python.exe 存在于 process.python.path 指定的路径,
则直接调用,不会检测 Python.exe 的版本,如果在指定路径找不到 python.exe,
aardio 也会自动下载 process.python.version 指定版本的嵌入版 Python 。 process.python.version 指定下载或安装 Python 时使用的版本。
process.python.win32 指定在 64 位系统是否下载 32 位 Python。 不是所有版本都提供嵌入发行版或者安装包,
指定版本前请先到以下网站检查一下:
https://npmmirror.com/mirrors/python/
https://www.python.org/ftp/python
可使用 process.python.cdnUrl 修改默认下载地址。
镜像的 HEAD 检查失败时改用 Python 官网;实际下载、解压失败会返回原有错误,不保证自动重试。 当然,如果程序自带 Python ,就不用考虑下载的问题了。
必读
创建 Python 进程,当前进程退出时 Python 会自动退出。
返回进程管道( process.popen )对象。
单个字符串是已处理的原始命令行,直接传递,不拆解、不 trim、不重新转义。
数组、多参数及命名选项的值按字面内容编码,不 trim、不剥引号;命名选项 DSL 结构保留。
数组默认逐字保留参数内容;不要手工加边界引号
进程外调用 32 / 64 位 Python,已封装解释器检查、自动下载和安装。
设置 version 后调用 exec 即可,通常无需自行下载 Python。
仅准备解释器请调用 checkPath。
此支持库已导入 JSON,可使用返回管道的 json、jsonAll、ndjsonAll、jsonWrite 等函数
Python 下载镜像;HEAD 检查失败时改用 Python 官网。
实际下载失败不保证自动重试,checkPath 保留可用的原始错误信息
检查并在需要时自动下载、安装 Python,不执行 Python 代码。
成功返回解释器路径;下载、解压或安装未完成返回 null,错误信息,错误代码(可用时)。
已有自带解释器直接复用,不检查或替换其版本。
version 配置错误仍会抛出异常
代码页,默认为 65001(UTF-8 编码)
Python 2.x 需要改为 0,Python 3.x 不用修改
创建 Python 进程运行 Python 代码
创建 Python 进程,以 -c 运行 @code,返回 process.popen;不关闭标准输入。
代码作为字面参数编码,保留首尾空白和引号。
如果代码开始为 aardio 模板标记,则启用模板语法。
@2 开始仅传一个字符串时,作为已处理的原始尾命令行直接追加。
数组、多参数及命名选项的值按字面内容编码,不 trim、不剥引号;命名选项 DSL 结构保留。
传一个包含空格或引号的参数,请放入数组;单字符串仍表示原始尾命令行
指定 Python 进程的环境变量。
可指定包含环境变量名值对的表对象。
也可传入以下格式的字符串对象:
环境变量的名字与值之间以=号分隔,多个环境变量以'\0'分隔。
也可提前用 string.setenv("name","value") 指定当前进程的环境变量。
Python 进程默认会继承当前进程的环境变量。
创建 Python 进程运行 Python 代码。
此函数在写入 Python 代码以后会自动关闭 Python 标准输入。
改用 process.python.command 函数不会关闭标准输入
创建 Python 进程,当前进程退出时 Python 会自动退出。
返回进程管道( process.popen )对象。并已关闭标准输入管道。
@code 指定要执行的 Python 代码,用进程的标准输入写入代码。
如果代码开始为 aardio 模板标记,则启用模板语法 。
@code 也可以指定一个包含 *.aardio 代码文件,支持模板语法。
@code 也可以指定指定 *.py 文件。
@code 可指定资源文件,注意这是内存加载 Python 代码,
Python 并不知道文件路径。
如果希望 Python 直接加载文件,请改用 execfile 函数。
单个尾字符串作为已处理的原始命令行直接追加,不拆解、不 trim、不重新转义。
数组、多参数及命名选项的值按字面内容编码,不 trim、不剥引号;命名选项 DSL 结构保留。
传一个包含空格或引号的参数,请放入数组;单字符串仍表示原始尾命令行
创建 Python 进程运行 Python 代码文件
创建 Python 进程,运行 @path 指定的 Python 代码文件(*.py),返回 process.popen。
脚本路径转换为完整路径后作为字面参数编码。
单个尾字符串作为已处理的原始命令行直接追加。
数组、多参数及命名选项的值按字面内容编码,不 trim、不剥引号;命名选项 DSL 结构保留。
传一个包含空格或引号的参数,请放入数组;单字符串仍表示原始尾命令行
查找系统安装的 Python.exe 路径。
如果不指定参数则返回一个表,键为版本,值为路径。
搜索注册表中的系统 Python。
只使用 @sysVersion 的主、次版本,例如 "3.12.10" 按 "3.12" 查找,不检查补丁号。
优先匹配指定主、次版本,再查找主版本相同且次版本更高的解释器。
如果 @win32 为 true,则优先返回指定主、次版本的 32 位 Python 路径。
找不到符合条件的 Python.exe 则返回 null
调用 exec 函数运行 GitHub 上的 Python 代码。
url 指定包含 blob,raw 的 GitHub 网址时可以省略域名。
创建 Python 进程,返回 process.popen,并已关闭标准输入。
尾参数规则与 exec 相同:单个字符串原样追加,数组、多参数及命名值按共同的字面参数规则编码,保留 DSL 结构。
传一个包含空格或引号的参数,请放入数组;单字符串仍表示原始尾命令行
创建 Python 进程运行 Python 代码,返回 JSON-RPC 客户端对象。
多次RPC 调用不需要重新创建 Python 进程,运行速度比直接调用 process.python 快很多。
返回对象:processRpcJsonClientObject
创建 Python 进程运行 Python 代码,返回 JSON-RPC 客户端对象。
@code 参数可以指定 *.py 文件路径、Python 模块名称、Python 代码都行。
如果指定 *.aardio 路径,则以模板语法解析并内存执行返回的 Python 代码。
函数执行成功返回 process.rpc.jsonClient 对象
创建启用严格模式的 Python JSON-RPC 客户端;旧 jsonRpc 不变。
Python 代码应 import jsonrpyc2,辅助文件采用版本文件名,仅在不存在时复制。
默认 30000 毫秒响应超时、独立 ID、完整 LF 帧,不自动重启重发。
参数解析、args/kwargs 与 jsonRpc 相同;可修改 client.rpc.timeoutMs。
返回对象:processRpcJsonClientObject
参数与 jsonRpc 相同。Python 常规用 RPC(Target());
宿主驱动用 RPC(Target(),watch=False,stdin=False,stdout=False).dispatch(完整消息)。
dispatch 在调用线程执行,返回响应对象/数组;通知返回 None,不自行读写或启动线程。
创建 Python 进程运行 Python 模块
创建 Python 进程,以 -m 运行 @name 指定的模块,返回 process.popen。
单个尾字符串作为已处理的原始命令行直接追加。
数组、多参数及命名选项的值按字面内容编码,不 trim、不剥引号;命名选项 DSL 结构保留。
传一个包含空格或引号的参数,请放入数组;单字符串仍表示原始尾命令行
Python.exe 路径,默认为 "/py/python.exe",单个斜杠相对于应用程序基准目录。
缺失时自动下载 version 指定的 embed 绿色版;已有文件直接复用,不验证版本。
如果指定为 "python.exe" 则查找系统 Python,缺失时自动下载安装程序(新版为 EXE,旧版为 MSI)。
64 位系统默认下载 64 位 Python,win32=true 可请求 32 位
显式启动已存在的 Python 可执行文件,不查找、不下载、不安装,不修改 process.python.path。
返回原生 process.popen,默认 codepage=65001,绑定现有 limitKill 作业。
arguments 为字符串或数组;startInfo 与 process.popen 相同,另支持 codepage(含0)。
该函数不调用 checkPath;本库既有 import 时 PYTHONIOENCODING/PYTHONPATH 初始化保持不变。
以 command 执行 @code,关闭标准输入并排空标准输出、标准错误,不保存输出内容。
进程正常退出且退出码为 0 返回 true,否则返回 false;未创建进程返回 null。
stderr 中的 warning 不视为失败,非零退出即使没有 stderr 也视为失败。
参数规则与 command 相同
自定义使用 embed 版 Python 的 PYTHONUSERBASE 环境变量值,
process.python.path 的值为 "python.exe" 时此属性无效
缺少解释器时下载或安装的 Python 版本,默认为 "3.8.10"。
例如设置为 "3.12.10" 后调用 exec(""),或仅调用 checkPath() 准备解释器,无需另写下载代码。
默认 embed 模式:已有 path 文件直接复用,修改此值不会自动更换或校验已有解释器。
path="python.exe" 时:只按主、次版本选择系统 Python,不检查补丁号。
此属性不是本次实际运行精确版本的保证
在 64 位系统是否也默认下载 32 位 Python。
发布时如果选择打包为独立 EXE 时可兼容 32 / 64 位 Python
指定运行 Python 代码的工作目录