本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
表达式快速参考
表达式使用 Python 表达式语法的子集。值的类型为bool、int、float、string、pathrange_expr、或list[。Job 参数的声明类型采用小写形式,因此T]PATH参数是path值,CHUNK[INT]任务参数是。range_expr任何函数也可以在其第一个参数上作为方法调用,所以upper(Param.Name)和Param.Name.upper()都是一样的。本页列出了作业模板最常使用的语言部分。有关完整的函数库,请参阅 GitHub 网站上的Ope n Job Description函数库
以下变量可用。Job 参数在创建作业时是已知的,因此随后会计算仅使用Param值的表达式。任务和会话变量仅在工作程序上是已知的,因此使用它们的表达式在提交时会进行类型检查,并在任务运行时进行评估。
| 变量 | 类型 | 说明 |
|---|---|---|
Param. |
声明的类型 | 作业参数值。对于PATH和LIST[PATH]参数,已应用路径映射规则。 |
RawParam. |
string |
路径映射之前提交的PATH参数的原始值。在调用之前,使用它来操作来自另一个操作系统的路径apply_path_mapping()。 |
Task.Param. |
声明的类型 | 任务参数值。CHUNK[INT]参数是range_expr; 调用list()它来迭代帧。 |
Task.File.,
Env.File. |
path |
工作器上写入嵌入文件的位置。 |
Session.WorkingDirectory |
path |
工作器上会话的临时工作目录。 |
Job.Name, Step.Name |
string |
已解析的作业名称和当前步骤名称。 |
以下运算符和函数涵盖了大多数模板逻辑。
| 类别 | 运算符和函数 | 示例 |
|---|---|---|
| 算术 | + - * / // % **, abs(), min(),
max(), sum(), floor(), ceil(),
round() |
{{ min(Param.FrameRange) }}{{ max(Param.FrameRange) }}以及帧范围参数的第一帧和最后一帧 |
| 比较和逻辑 | == != < <= > >=, in, not
in, and, or, not,
|
{{ 'large' if Param.Epochs >= 100 else 'small' }} |
| 转换 | string(), int(), float(),
bool(), path(), list(),
range_expr() |
{{ len(list(Task.Param.Frame)) }} |
| 字符串 | upper()、lower()、、strip()、replace()、split()、join()、、startswith()、endswith()zfill()removeprefix()removesuffix()、slicing [ |
{{ zfill(Task.Param.Frame, 4) }} |
| 正则表达式 | re_match(), re_search(), re_findall(),
re_sub(), re_split(), re_escape() |
{{ re_search(Param.Dataset.stem, r'_v(\d+)')[1] }} |
| 路径 | /加入、+追加文本、.name、.stem、.suffix、.parent、.parts、with_suffix()、with_stem()、with_number()、as_posix() apply_path_mapping() |
{{ Param.OutputPattern.with_number(Task.Param.Frame) }} |
| Lists | len(),索引 [[,,sorted(),reversed(),unique(),flatten(),range() |
{{ [Param.OutputDir / f for f in Param.Files] }} |
| 脚本引用 | repr_sh()对于 bash、f repr_pwsh() or PowerShell、对于 Windows CMD、repr_cmd()对于 repr_py() Python、repr_json()对于 JSON |
{{ repr_pwsh(list(Task.Param.Frame)) }} |
| 验证 | fail(通过消息停止创建工作 |
{{ Param.Count if Param.Count > 0 else fail('Count must be positive') }} |
无论文件名包含占位符还是实际数字,该with_number()函数都会替换文件名中的帧号。它可以识别哈希填充(例如 #### printf 风格%04d)和一连串数字(例如)0001,并将结果填充到相同的宽度。因此,参数值可以是模式或序列的第一个文件:path('/renders/shot_####.exr')path('/renders/shot_%04d.exr')、,并path('/renders/shot_0001.exr')全部/renders/shot_0072.exr给出with_number(72)。当名称中没有这些数字时,该函数会在词干上附加一个四位数的数字。
有一些行为与 Python 不同。and和or运算符返回其中的一个操作null数,false并且只有 and 算作 false0,因此,空字符串和空列表不会。这是一种为未设置的值提供后备的方法:当可选参数为时{{ Param.OutputName or Param.InputFile.stem }}使用输入文件的名称null,并按给定值保留一个空字符串。or中的条件必须是布尔值。整数为 64 位,溢出是错误而不是静默换行。将不同类型的值与进行比较a if test else
bfalse不是错误,唯一的不同==是与int进行比较float和string比较的错误path。JSON 文字null、true、和false,与NoneTrue、和False一起接受。
有关更多信息,请参阅以下资源:
-
GitHub网站上的Ope n Job Description表达语言
——语法、类型系统、评估规则以及每个带有签名的运算符和函数。 -
向作业模板添加表达式— 向模板添加表达式。