oslo_concurrency.processutils

系统级工具和辅助函数。

异常 oslo_concurrency.processutils.InvalidArgumentError(message=None)

基础: Exception

oslo_concurrency.processutils.LogErrors(value, names=<未提供>, *values, module=None, qualname=None, type=None, start=1, boundary=None)

基类: IntEnum

枚举,影响错误发生时是否记录 stdout 和 stderr。

在 2.7 版本中添加。

ALL = 1

在每次发生错误时记录错误。

DEFAULT = 0

不记录错误。

FINAL = 2

仅在最后一次出错尝试时记录错误。

异常 oslo_concurrency.processutils.NoRootWrapSpecified(message=None)

基础: Exception

异常 oslo_concurrency.processutils.ProcessExecutionError(stdout=None, stderr=None, exit_code=None, cmd=None, description=None)

基础: Exception

oslo_concurrency.processutils.ProcessLimits(**kw)

基类: object

进程的资源限制。

属性

  • address_space: 地址空间限制,以字节为单位

  • core_file_size: 核心文件大小限制,以字节为单位

  • cpu_time: CPU 时间限制,以秒为单位

  • data_size: 数据大小限制,以字节为单位

  • file_size: 文件大小限制,以字节为单位

  • memory_locked: 锁定的内存限制,以字节为单位

  • number_files: 最大打开文件数

  • number_processes: 最大进程数

  • resident_set_size: 最大常驻集大小 (RSS),以字节为单位

  • stack_size: 堆栈大小限制,以字节为单位

此对象可用于 execute()prlimit 参数。

prlimit_args()

创建用于 prlimit 命令行的参数列表。

异常 oslo_concurrency.processutils.UnknownArgumentError(message=None)

基础: Exception

oslo_concurrency.processutils.execute(*cmd, **kwargs)

辅助方法,用于通过子进程执行 shell 命令。

允许可选重试。

参数:
  • cmd (字符串) – 传递给 subprocess.Popen。

  • cwd (字符串) – 设置当前工作目录

  • process_input (字符串或字节) – 发送到打开的进程。

  • env_variables (字典) – 环境变量及其值,这些变量将设置为进程。

  • check_exit_code (布尔值、整数或 [整数]) – 单个布尔值、整数或允许的退出代码列表。默认为 [0]。除非程序以其中一个代码退出,否则引发 ProcessExecutionError

  • delay_on_retry (布尔值) – True | False。默认为 True。如果设置为 True,则在重试之前等待一小段时间。

  • attempts (整数) – 重试 cmd 的次数。

  • run_as_root (布尔值) – True | False。默认为 False。如果设置为 True,则命令将由 root_helper kwarg 中指定的命令进行前缀。

  • root_helper (字符串) – 用于为 run_as_root=True 的命令添加前缀的命令

  • shell (布尔值) – 是否应使用 shell 来执行此命令。默认为 false。

  • loglevel (int. (应为 logging.DEBUG 或 logging.INFO)) – execute 命令的日志级别。

  • log_errors (LogErrors) – 是否应在发生错误时记录 stdout 和 stderr?可能的值为 DEFAULTFINALALL。请注意,FINALALL 的值仅在请求使用 attempts 参数进行多次命令执行尝试时相关。

  • binary (布尔值) – 在 Python 3 上,如果 binary 为 True,则将 stdout 和 stderr 作为字节返回,否则作为 Unicode 返回。

  • on_execute (函数(subprocess.Popen)) – 此函数将在进程创建时使用该对象作为参数进行调用。其目的是允许调用者跟踪异步进程创建。processutils.execute

  • on_completion (函数(subprocess.Popen)) – 此函数将在进程完成时使用该对象作为参数进行调用。其目的是允许调用者跟踪异步进程完成。processutils.execute

  • preexec_fn (函数()) – 此函数将在子进程执行之前在子进程中调用。警告:在 Windows 上,我们无声地放弃此 preexec_fn,因为它不受 Windows 上 subprocess.Popen 的支持(引发 ValueError)

  • prlimit (ProcessLimits) – 设置子进程的资源限制。有关详细说明,请参阅下文。

  • python_exec (字符串) – 用于强制执行 prlimit 的 python 可执行文件。如果未设置或为 None,则默认使用 sys.executable。

  • timeout (int) – 等待进程终止的超时时间(秒)。如果达到超时时间,则引发 subprocess.TimeoutExpired

返回值:

来自进程执行的 (stdout, stderr)

引发:

UnknownArgumentError 在接收到未知参数时

引发:

ProcessExecutionError

引发:

OSError

引发:

subprocess.TimeoutExpired

可以使用 prlimit 参数来设置子进程的资源限制。如果使用此参数,则子进程将由包装器进程生成,该进程将在生成命令之前设置限制。

版本 3.17 中更改:process_input 现在可以在 python3 上是字节或字符串。

版本 3.4 中更改:添加了可选参数 prlimit

版本 1.5 中更改:添加了可选参数 cwd

版本 1.9 中更改:添加了可选参数 binary。在 Python 3 上,stdoutstderr 现在默认作为 Unicode 字符串返回,如果 binary 为 true,则作为字节返回。

版本 2.1 中更改:添加了可选参数 on_executeon_completion

版本 2.3 中更改:添加了可选参数 preexec_fn

oslo_concurrency.processutils.get_worker_count()

实用工具,用于获取默认工作器数量。

返回值:

如果可以确定,则为 CPU 数量,否则返回默认工作器数量 1。

oslo_concurrency.processutils.ssh_execute(ssh, cmd, process_input=None, addl_env=None, check_exit_code=True, binary=False, timeout=None, sanitize_stdout=True)

通过 SSH 运行命令。

参数:
  • ssh – SSH 连接对象。

  • cmd – 要运行的命令字符串。

  • check_exit_code – 是否应为非零退出代码引发异常。

  • timeout – 命令执行的最大时间(秒)。

  • sanitize_stdout – 默认为 True。如果设置为 True,则 stdout 将被清理,即命令输出中的任何敏感信息(如密码)将被屏蔽。

返回值:

来自通过 SSH 执行命令的 (stdout, stderr)

版本 1.9 中更改:添加了可选参数 binary

oslo_concurrency.processutils.trycmd(*args, **kwargs)

execute() 的包装器,以便更轻松地处理警告和错误。

返回一个 (out, err) 元组的字符串,其中包含命令的 stdout 和 stderr 的输出。如果“err”不为空,则可以认为该命令已失败。

参数:

discard_warnings (布尔值) – True | False。默认为 False。如果设置为 True,则对于成功的命令,stderr 将被清除

返回值:

来自进程执行的 (out, err)