运行与输出

从菜谱中输出文本

使用 self.output 属性从菜谱中输出文本。请**勿**使用 Python 的 print() 函数。

error(self, msg: str, error_type: str = None)

指示发生了严重问题,导致系统或应用程序无法继续正常运行。

通常,这表示执行的正常流程中出现了故障,例如服务崩溃或关键异常。请注意,如果用户设置了 core:warnings_as_errors 配置,这将在输出打印时引发异常,以确保错误不会被忽视。

warning(self, msg: str, warn_tag: str = None)

突出显示一个潜在问题,该问题虽然不会停止系统,但将来或在某些条件下可能会导致问题。

警告表示异常情况,应进行审查,但并不一定会导致操作立即停止。请注意,如果标签与 core:warnings_as_errors 配置中的模式匹配,并且未跳过,则此警告将升级为错误,并在输出打印时引发异常,以确保错误不会被忽视。

success(self, msg: str)

显示操作已成功完成。

此类消息有助于确认关键流程或任务已正确完成,这对于良好的应用程序监控至关重要。

highlight(self, msg: str)

标记或强调需要突出显示但并不一定表示成功或错误的重要事件或流程。

这些消息引起用户或管理员对可能相关的关键点的注意。

info(self, msg: str, fg: str = None, bg: str = None)

提供有关系统或正在进行的操作的一般信息。

信息消息是基本的,用于通知常见事件,例如流程的开始或完成,而不暗示具体问题或成就。

status(self, msg: str, fg: str = None, bg: str = None)

提供有关系统或正在进行的操作的一般信息。

信息消息是基本的,用于通知常见事件,例如流程的开始或完成,而不暗示具体问题或成就。

以下三个方法默认不显示,通常保留用于需要更高详细级别的场景。您可以使用 -v-vv-vvv 参数分别显示它们。

verbose(self, msg: str, fg: str = None, bg: str = None)

显示附加的详细信息,这些信息虽然不关键,但对于更好地理解系统如何工作可能很有用。

除非用户已将日志级别设置为详细(例如,在命令行中使用 -v 选项),否则此消息将不会打印。

它适用于获取更多上下文,而不会用过多的细节使日志过载。当需要比简单信息更清晰的说明时很有用。

debug(self, msg: str, fg: str = '\x1b[35m', bg: str = None)

具有高详细级别,主要用于调试代码。

除非用户已将日志级别设置为调试(例如,在命令行中使用 -vv 选项),否则此消息将不会打印。

这些消息为开发人员提供了有用的信息,例如变量值或执行流程详细信息,以追踪错误或分析程序的行为。

trace(self, msg: str)

这是最极端的详细级别。

跟踪消息记录系统采取的每一个小步骤,包括函数进入和退出、变量更改以及其他非常具体的事件。

除非用户已将日志级别设置为跟踪(例如,在命令行中使用 -vvv 选项),否则此消息将不会打印。

当需要完全了解系统中发生的一切时使用,但由于它可能生成大量信息,因此应谨慎使用。

这些输出函数仅在 Conan 启动时的详细级别与消息相同或更高时才会输出,因此使用 -vwarning 运行将输出对 warning()error() 的调用,但不会输出 info()(此外,highlight()success() 方法具有 -vnotice 详细级别)

请注意,这些方法会再次返回输出对象,因此您可以根据需要链式调用输出。

使用 core:warnings_as_errors conf,您可以让 Conan 在打印错误或匹配任何给定模式的带标签警告时引发异常。这有助于确保菜谱不会打印意外的警告或错误。此外,您可以使用 core:skip_warnings conf 跳过哪些警告会触发异常。

# Raise an exception if any warning or error is printed
core:warnings_as_errors=['*']
# But skip the deprecation warnings
core:skip_warnings=['deprecated']

两个 conf 都接受一个模式列表,用于匹配警告标签。可以使用特殊的 unknown 值来匹配任何没有标签的警告。

要在菜谱中标记警告,请使用 warning() 方法的 warn_tag 参数

self.output.warning("Extra warning", warn_tag="custom_tag")

注意

自定义命令和工具可以自由实例化自己的 ConanOutput 对象。

某些方法具有可选的 fgbg 参数,这些是文本前景色和背景色的颜色代码,可在 conan.api.output.Color 类中使用。

self.output.info("This is a message", fg=Color.BLUE, bg=Color.YELLOW)

运行命令

菜谱和助手可以使用 self.run() 方法运行系统命令,同时注入激活相应环境的调用,并在发生错误时抛出异常,以确保命令错误不会被忽视。它还将命令与 命令包装器插件 的结果一起包装。

run(self, command: str, stdout=None, cwd=None, ignore_errors=False, env='', quiet=False, shell=True, scope='build', stderr=None)

在当前包上下文中运行命令。

参数:
  • command – 要运行的命令。

  • stdout – 写入命令输出的输出流。如果为 None,则默认为标准输出流。

  • stderr – 写入命令错误输出的错误输出流。如果为 None,则默认为标准错误流。

  • cwd – 运行命令的当前工作目录。

  • ignore_errors – 如果为 True,则如果命令返回非零退出代码,则不引发错误。

  • env – 要使用的环境文件。如果为空,当 scopebuild 时默认为 "conanbuild",当 scoperun 时默认为 "conanrun"。如果明确设置为 None,则不会应用任何环境文件,这对于不需要任何环境的命令很有用。

  • quiet – 如果为 True,则抑制命令的输出。

  • shell – 如果为 True,则在 shell 中运行命令。这会传递给底层的 Popen 函数。

  • scope – 命令的范围,可以是 "build""run"

使用 stdoutstderr 参数将命令的输出重定向到类似文件的对象而不是控制台。

# Redirect stdout to a file
with open("ninja_stdout.log", "w") as stdout:
    # Redirect stderr to a StringIO object to be able to read it later
    stderr = StringIO()
    self.run("ninja ...", stdout=stdout, stderr=stderr)