View a markdown version of this page

表达式快速参考 - 截止日期云

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

表达式快速参考

表达式使用 Python 表达式语法的子集。值的类型为bool、int、float、string、pathrange_expr、或list[T]。Job 参数的声明类型采用小写形式,因此PATH参数是path值,CHUNK[INT]任务参数是。range_expr任何函数也可以在其第一个参数上作为方法调用,所以upper(Param.Name)和Param.Name.upper()都是一样的。本页列出了作业模板最常使用的语言部分。有关完整的函数库,请参阅 GitHub 网站上的Ope n Job Description函数库。

以下变量可用。Job 参数在创建作业时是已知的,因此随后会计算仅使用Param值的表达式。任务和会话变量仅在工作程序上是已知的,因此使用它们的表达式在提交时会进行类型检查,并在任务运行时进行评估。

变量 类型 说明
Param.Name 声明的类型 作业参数值。对于PATH和LIST[PATH]参数,已应用路径映射规则。
RawParam.Name string 路径映射之前提交的PATH参数的原始值。在调用之前,使用它来操作来自另一个操作系统的路径apply_path_mapping()。
Task.Param.Name 声明的类型 任务参数值。CHUNK[INT]参数是range_expr; 调用list()它来迭代帧。
Task.File.Name, Env.File.Name 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, a if test else b {{ '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 [start:stop] {{ 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(),索引 [i][expr for x in list],,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(message)通过消息停止创建工作 {{ 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中的条件a if test else b必须是布尔值。整数为 64 位,溢出是错误而不是静默换行。将不同类型的值与进行比较false不是错误,唯一的不同==是与int进行比较float和string比较的错误path。JSON 文字null、true、和false,与NoneTrue、和False一起接受。

有关更多信息,请参阅以下资源: