命令行界面(CLI)

命令行界面(CLI)提供了与 Odoo 相关的多种功能。您可以使用它来:ref:运行服务器 <reference/cmdline/server>以 Python 控制台环境启动 Odoo生成 Odoo 模块填充数据库统计代码行数

重要

调用 CLI 的命令取决于你如何安装 Odoo。在下面的示例中,我们假设你正在从源代码运行 Odoo(/administration/on_premise/source)并使用 odoo-bin 文件。如果你是通过 发行版包 安装的 Odoo 或者使用 Docker,则必须调整该命令。

  1. 导航到你下载 Odoo 社区源文件的目录根目录。

  2. 使用 ./odoo-bin 运行所有 CLI 命令

帮助与版本

-h, --help

显示包含所有可用选项的帮助文本

--version

显示 Odoo 版本,例如 “Odoo 服务器 18.0”

小技巧

您可以通过运行以下命令在您的 shell 中启用自动补全功能:

echo "complete -W '`./odoo-bin --help | \
  sed -e 's/[^a-z_-]\(-\+[a-z0-9_-]\+\)/\n\1\n/' | \
  grep -- '^-' | sort | uniq | tr '\n' ' '`' odoo-bin" >> ~/.bash_completion

运行服务器

-d <database>, --database <database>

安装或更新模块时使用的数据库。提供逗号分隔的列表将限制对列表中提供的数据库的访问。

如需了解高级数据库选项,请参阅:ref:下方 <reference/cmdline/server/database>

-i <modules>, --init <modules>

运行服务器之前要安装的模块的逗号分隔列表(需要 -d)。

-u <modules>, --update <modules>

更新服务器前要更新的模块的逗号分隔列表。使用 all 表示所有模块。(需要 -d

--addons-path <directories>

用逗号分隔的目录列表,其中存储了模块。这些目录将被扫描以查找模块。

--upgrade-path <upgrade_path>

指定一个额外的升级路径。

--load <modules>

要加载的全局服务器模块列表。这些模块应提供不一定与特定数据库相关的功能。这与安装时总是绑定到特定数据库的模块形成对比(即大多数 Odoo 插件)。默认值为 base,web

-c <config>, --config <config>

指定另一个 配置文件 的路径。如果未定义,Odoo 会检查 ODOO_RC 环境变量和默认路径 $HOME/.odoorc。请参阅下面的配置文件部分 参考

-D <data-dir-path>, --data-dir <data-dir-path>

存储 Odoo 数据的目录路径(例如 filestore、sessions)。如果未指定,Odoo 将回退到预定义的路径。在 Unix 系统上,其路径由 $XDG_DATA_HOME 环境变量定义,或者为 ~/.local/share/Odoo/var/lib/Odoo

-s, --save

将服务器配置保存到当前配置文件中(默认为 $HOME/.odoorc,可通过 -c 选项进行重写)。

--without-demo

禁用已安装模块的演示数据加载(以逗号分隔),使用 all 表示所有模块。需要 -d-i

--pidfile=<pidfile>

文件路径,服务器 PID 将在此文件中存储

--stop-after-init

在初始化后停止服务器。

--geoip-city-db <path>

绝对路径到 GeoIP 城市数据库文件。

--geoip-country-db <path>

绝对路径指向 GeoIP 国家数据库文件。

测试配置

--test-enable

安装模块后运行测试

--test-file <file>

运行一个 Python 测试文件

--test-tags [-][tag][/module][:class][.method]

用逗号分隔的规格列表,用于筛选要执行的测试。如果设置,则启用单元测试。

示例:--test-tags :TestClass.test_func,/test_module,external

  • - 指定是否包含或排除与该规范匹配的测试。

  • 该标签将匹配通过 tagged() 装饰器添加到类上的标签(所有 测试类 默认都带有 standardat_install 标签,直到被显式移除,请参阅装饰器文档)。

  • * 将匹配所有标签。

  • 如果在包含模式中省略标签,其值为 standard

  • 如果在排除模式下省略标签,其值为 *

  • 模块、类和方法将分别与模块名称、测试类名称和测试方法名称匹配。

测试的过滤和执行会进行两次:在每个模块安装/更新后立即执行,以及在模块加载结束时执行。在每个阶段,测试会根据 --test-tags 规则进行过滤,并且分别根据动态规则 at_installpost_install 进行进一步过滤。

--screenshots

指定在 HttpCase.browser_js 测试失败时保存截图的目录。默认值为 /tmp/odoo_tests/db_name/screenshots

--screencasts

启用屏幕录制并指定保存屏幕录制文件的目录。需要安装 ffmpeg 工具以将帧编码为视频文件。否则,将保留帧而不是视频文件。

数据库

-r <user>, --db_user <user>

数据库用户名,用于连接 PostgreSQL。

-w <password>, --db_password <password>

数据库密码,如果使用 密码认证

--db_host <hostname>

数据库服务器的主机名

  • localhost 在 Windows 上

  • UNIX 套接字,否则

--db_port <port>

指定数据库监听的端口,默认值为 5432

--db-filter <filter>

隐藏与 <筛选器> 不匹配的数据库。筛选器是一个 正则表达式,并具有以下附加功能:

  • %h 由请求所在的完整主机名替换。

  • %d 会被请求所使用的子域名替换,但 www 除外(因此域名 odoo.comwww.odoo.com 都会匹配数据库 odoo)。

    这些操作区分大小写。要匹配所有数据库,请添加选项 (?i)``(例如,使用 ``(?i)%d 的域 odoo.com 会匹配数据库 Odoo)。

自版本 11 起,还可以通过使用 --database 参数并指定一个以逗号分隔的数据库列表来限制对特定数据库的访问。

当同时使用这两个参数时,db-filter 会覆盖逗号分隔的数据库列表,用于限制数据库列表;而逗号分隔的列表则用于执行请求的操作,例如模块的升级。

$ odoo-bin --db-filter ^11.*$

仅限制对名称以 11 开头的数据库的访问

$ odoo-bin --database 11firstdatabase,11seconddatabase

仅限制访问两个数据库,11firstdatabase 和 11seconddatabase

$ odoo-bin --database 11firstdatabase,11seconddatabase -u base

仅限制访问两个数据库:11firstdatabase 和 11seconddatabase,并在其中一个数据库上更新基础模块:11firstdatabase。如果数据库 11seconddatabase 不存在,则创建该数据库并安装基础模块。

$ odoo-bin --db-filter ^11.*$ --database 11firstdatabase,11seconddatabase -u base

仅限制名称以 11 开头的数据库的访问权限,并在数据库 11firstdatabase 上更新基础模块。如果数据库 11seconddatabase 不存在,则会创建该数据库并安装基础模块。

--db-template <template>

在从数据库管理界面创建新数据库时,使用指定的 模板数据库。默认值为 template0

--pg_path </path/to/postgresql/binaries>

用于数据库管理器导出和恢复数据库的 PostgreSQL 二进制文件的路径。只有在这些二进制文件位于非标准目录中时,才需要指定此选项。

--no-database-list

隐藏列出系统中可用数据库的能力

--db_sslmode

控制 Odoo 与 PostgreSQL 之间连接的 SSL 安全性。值应为 ‘disable’、’allow’、’prefer’、’require’、’verify-ca’ 或 ‘verify-full’。默认值为 ‘prefer’

--unaccent

尝试在创建新数据库时启用 unaccent 扩展

邮件

--email-from <address>

用于 Odoo 需要发送邮件时的 <FROM> 邮件地址

--from-filter <address or domain>

定义 SMTP 配置将适用的邮件地址。该字段可以是域名或完整的邮件地址,也可以留空。如果发件人的邮件地址不匹配此筛选器,则邮件将使用两个系统参数的组合进行封装:mail.default.frommail.catchall.domain。例如,”Admin” <admin@example.com> => “Admin” <notifications@mycompany.com>。

--smtp <server>

SMTP 服务器的地址,用于发送邮件时连接该服务器

--smtp-port <port>
--smtp-ssl

如果设置,Odoo 应该使用 SSL/STARTSSL SMTP 连接

--smtp-user <name>

用于连接 SMTP 服务器的用户名

--smtp-password <password>

用于连接 SMTP 服务器的密码

--smtp-ssl-certificate-filename <path/to/cert.pem>

用于身份验证的 SSL 证书。如果已设置,则需要 smtp-ssl-private-key

--smtp-ssl-private-key-filename <path/to/key.pem>

用于身份验证的 SSL 私钥。如果已设置,则需要 smtp-ssl-certificate

国际化

使用这些选项将 Odoo 翻译为其他语言。参见用户手册中的 i18n 部分。选项 “-d” 是必需的。在导入情况下,选项 “-l” 也是必需的。

--load-language <languages>

指定要加载的翻译语言(用逗号分隔)

-l, --language <language>

指定翻译文件的语言。与 –i18n-export 或 –i18n-import 一起使用

--i18n-export <filename>

将所有待翻译的句子导出到 CSV 文件、PO 文件或 TGZ 归档文件并退出。

--i18n-import <filename>

使用 ‘-l’ 选项导入包含翻译的 CSV 或 PO 文件并退出。必须指定 ‘-l’ 选项。

--i18n-overwrite

覆盖在更新模块或导入 CSV 或 PO 文件时已有的翻译术语。

--modules

指定要导出的模块。与 –i18n-export 一起使用

高级选项

开发者功能

--dev <feature,feature,...,feature>

用逗号分隔的功能列表。仅用于开发目的。不要在生产环境中使用。可能的功能包括:

  • all:以下所有功能均被启用

  • xml:直接从 XML 文件读取 QWeb 模板,而不是从数据库中读取。一旦模板在数据库中被修改,将在下一次更新/初始化之前不会从 XML 文件中读取。特别需要注意的是,使用此选项时,模板不会被翻译。

  • reload:当 Python 文件更新时重新启动服务器(可能因使用的文本编辑器不同而无法检测到)

  • qweb:当节点包含 t-debug='debugger' 时,中断 QWeb 模板的评估

  • (i)p(u)db:在发生意外错误并准备记录和返回错误之前,在代码中启动选定的 Python 调试器。

  • werkzeug:在发生异常时,在前端页面上显示完整的回溯信息

HTTP

--no-http

不要启动 HTTP 或长轮询工作进程(可能会启动 定时任务 工作进程)

警告

如果设置了 --test-enable,则此选项无任何效果,因为测试需要可访问的 HTTP 服务器。

--http-interface <interface>

HTTP 服务器监听的 TCP/IP 地址,默认为 ``0.0.0.0``(所有地址)

-p <port>
--http-port <port>

HTTP 服务器监听的端口,默认为 8069。

--gevent-port <port>

WebSocket 连接的 TCP 端口,用于多进程或 gevent 模式,默认值为 8072。在默认(线程)模式下不使用此端口。

--proxy-mode

通过 Werkzeug 的代理支持 启用 X-Forwarded-* 请求头的使用。

它在请求中缺少 X-Forwarded-Host 头时,会忽略所有 X-Forwarded-* 头。

它始终从 X-Forwarded-For 链的最后一个条目获取真实的 IP 地址。如果链中还有其他需要忽略的可信代理,请相应地配置您的 Web 服务器,例如使用 nginx 的 set_real_ip_from 指令。

X-Forwarded-ProtoX-Forwarded-Host 用于更新请求的根网址,该网址随后在成功完成管理员身份验证后用于更新 web.base.url 系统参数。此系统参数用于为当前数据库生成所有链接;参见 数据库的 Web 基础 URL

警告

代理模式 不得 在反向代理场景之外启用

--x-sendfile

代理将附件文件提供给静态 Web 服务器,并在流式响应中设置 ``X-Sendfile``(Apache)和 ``X-Accel-*``(Nginx)HTTP 头。有关 Web 服务器配置,请参阅 提供静态文件和附件

日志记录

默认情况下,Odoo 会显示级别为 INFOWARNINGERROR 的所有日志。所有日志,无论级别如何,都会输出到 stderr。可以使用多种选项将日志重定向到其他目标,并自定义详细程度。

--logfile <file>

将日志输出发送到指定的文件,而不是 stderr。在 Unix 系统上,该文件 可以由外部日志轮转程序管理,并在替换后会自动重新打开。

--syslog

将系统日志记录到系统的事件记录器:Unix 系统上的 syslogWindows 上的事件日志

两者均不可配置

--log-db <dbname>

将日志记录到指定数据库的 ir.logging 模型(ir_logging 表)。数据库可以是当前 PostgreSQL 中的数据库名称,或者用于日志聚合的 PostgreSQL URI

--log-handler <handler-spec>

LOGGER:LEVEL,用于将 LOGGER 设置为提供的 LEVEL 级别,例如 odoo.models:DEBUG 将启用 models 模块中所有等于或高于 DEBUG 级别的日志消息。

  • 冒号 : 是必需的

  • 日志记录器可以省略,以配置根(默认)处理器

  • 如果未指定级别,日志记录器将设置为 INFO

该选项可以重复使用以配置多个日志记录器,例如:

$ odoo-bin --log-handler :DEBUG --log-handler werkzeug:CRITICAL --log-handler odoo.fields:WARNING
--log-web

启用 HTTP 请求和响应的 DEBUG 日志记录,等同于 --log-handler=odoo.http:DEBUG

--log-sql

启用 SQL 查询的 DEBUG 日志记录,等同于 --log-handler=odoo.sql_db:DEBUG

--log-level <level>

用于更方便地在特定日志记录器上设置预定义日志级别。”实际”日志级别(criticalerrorwarndebug)被设置在 odoowerkzeug 日志记录器上(但 debug 仅设置在 odoo 上)。

Odoo 还提供了调试伪级别,这些级别适用于不同的日志记录器集合:

debug_sql

将 SQL 日志记录器设置为 debug

等效于 --log-sql

debug_rpc

odoo 和 HTTP 请求日志记录器设置为 debug

等效于 --log-level debug --log-request

调试 RPC 响应

odoo 和 HTTP 请求及响应记录器设置为 debug

等同于 --log-level debug --log-request --log-response

注解

如果 --log-level--log-handler 发生冲突,将使用后者

多进程处理

--workers <count>

如果 count 不为 0(默认值),则启用多进程处理,并设置指定数量的 HTTP 工作进程(子进程用于处理 HTTP 和 RPC 请求)。

注解

多进程模式仅在基于 Unix 的系统上可用

一些选项允许限制和回收工作进程:

--limit-request <limit>

工作者在被回收并重启之前将处理的请求数。

默认值为 8196

--limit-memory-soft <limit>

每个工作进程允许的最大虚拟内存量(以字节为单位)。如果超过限制,工作进程将在当前请求结束时被终止并重新启动。

默认值为 2048MiB (2048*1024*1024B)

--limit-memory-hard <limit>

虚拟内存的硬性限制(以字节为单位),任何超出该限制的工作进程将立即被终止,而不会等待当前请求处理完成。

默认值为 2560MiB (2560*1024*1024B)

--limit-time-cpu <limit>

防止工作者为每个请求使用的 CPU 秒数超过 <limit>。如果超过限制,工作者将被终止。

默认值为 60

--limit-time-real <limit>

防止工作者处理请求的时间超过 <limit> 秒。如果超过限制,工作者将被终止。

--limit-time-cpu 不同,此选项是一个“实际时间”限制,包括例如 SQL 查询的时间。

默认值为 120

--max-cron-threads <count>

分配给 cron 作业的工作进程数量。默认值为 2。在多线程模式下,工作进程是线程;在多进程模式下,工作进程是进程。

对于多进程模式,这额外包括 HTTP 工作进程。

配置文件

大多数命令行选项也可以通过配置文件进行指定。通常情况下,它们的名称与去掉前缀 - 后的名称类似,其他 - 会被替换为 _,例如:--db-template 会变成 db_template

某些转换不匹配该模式:

默认配置文件是 $HOME/.odoorc,可以使用 --config 进行重写。指定 --save 将会把当前的配置状态保存回该文件。与命令行相关的配置项应指定在 [options] 部分中。

这里是一个示例文件:

[options]
db_user=odoo
dbfilter=odoo

Shell

Odoo 命令行还允许将 Odoo 作为 Python 控制台环境启动,从而可以直接与 ORM 及其功能进行交互。

$ odoo-bin shell

Example

在所有联系人姓名后添加感叹号:

In [1]: records = env["res.partner"].search([])

In [2]: records
Out[2]: res.partner(14, 26, 33, 21, 10)

In [3]: for partner in records:
   ...:     partner.name = "%s !" % partner.name
   ...:

In [4]: env.cr.commit()

重要

默认情况下,shell 以事务模式运行。这意味着在退出 shell 时,对数据库所做的任何更改都会被回滚。要提交更改,请使用 env.cr.commit()

--shell-interface (ipython|ptpython|bpython|python)

指定在 shell 模式下使用的首选 REPL。此 shell 会预先初始化 env 变量,以便能够访问 ORM 和其他 Odoo 模块。

另请参见

引用/orm/environment

脚手架

脚手架是自动生成骨架结构以简化初始化(在 Odoo 的情况下,是新模块的初始化)。虽然不是必需的,但它可以避免设置基本结构的繁琐工作,并减少查找所有初始要求的麻烦。

可通过 odoo-bin scaffold 子命令使用脚手架功能。

$ odoo-bin scaffold my_module /addons/
name (required)

模块的名称,可能以各种方式进行处理以生成程序化名称(例如:模块目录名称、模型名称等)

destination (default=current directory)

创建新模块的目录,默认为当前目录

-t <template>

一个模板目录,文件会通过 jinja2 进行处理,然后复制到 destination 目录。

这将在目录 /addons/ 中创建模块 my_module

数据库填充

Odoo Populate 允许在给定的数据库中复制现有数据。这在需要大型表进行测试和基准测试时非常有用。复制过程会对某些字段引入变化,以遵守 UNIQUE 约束等要求。它还会遵循 x2Many 关系。

$ odoo-bin populate -d  my_database --models res.partner,account.move --factors 1000
-d <database>

数据库名称

--models

要填充的模型列表。重复出现的模型将只填充一次。

--factors

模型的填充因子列表。如果某个模型缺少填充因子,则将使用列表中的最后一个因子。

--sep

用于生成记录名称的分隔符

Cloc

Odoo Cloc 是一个用于统计用 Python、JavaScript、CSS、SCSS 或 XML 编写的相关代码行数的工具。这可以作为估算额外模块维护成本的一个粗略指标。

命令行选项

-d <database>, --database <database>
处理所提供数据库中所有已安装的附加模块的代码,以及在所提供数据库中手动创建的所有服务器操作和计算字段。
--addons-path 选项是必填项,用于指定模块文件夹的路径。
如果与 --path 一起使用,计数将是两个选项结果的总和(可能有重叠)。必须至少指定这两个选项中的一个,以确定要处理的代码。
$ odoo-bin cloc --addons-path=addons -d my_database

另请参见

  • 引用/命令行/cloc/数据库选项

-p <path>, --path <path>
处理提供的路径中的文件。
如果与 --database 一起使用,计数将是两个选项结果的总和(可能有重叠)。必须至少指定这两个选项中的一个,以确定要处理的代码。
$ odoo-bin cloc -p addons/account

可以多次重复该选项以提供多个路径。

$ odoo-bin cloc -p addons/account -p addons/sale

另请参见

  • 引用/cmdline/cloc/path-option

--addons-path <directories>
用逗号分隔的目录列表,其中存储了模块。这些目录将被扫描以查找模块。
如果使用了 --database 选项,则为必填项。
-c <directories>

指定一个配置文件,以替代 --addons-path 选项。

$ odoo-bin cloc -c config.conf -d my_database
-v, --verbose

显示每个文件的行数详细信息。

处理的文件

使用 --database 选项

Odoo Cloc 会统计给定数据库中已安装的附加模块中每个文件的行数。此外,它还会统计直接在数据库中创建或导入的服务器操作的 Python 代码行数以及自定义计算字段。最后,它还会统计从导入模块中获取的 JavaScript、CSS 和 SCSS 文件以及 QWeb 视图的代码行数。

默认情况下,以下文件会被排除在统计之外:

  • 模块的清单(__manifest__.py__openerp__.py

  • 该文件夹 static/lib 的内容

  • 在文件夹 testsstatic/tests 中定义的测试用例

  • 在文件夹 migrationsupgrades 中定义的迁移脚本

  • 声明在清单文件的 demodemo_xml 部分中的 XML 文件

对于特殊情况,可以为每个模块定义一个 Odoo Cloc 应该忽略的文件列表。这通过清单文件中的 cloc_exclude 条目来指定:

"cloc_exclude": [
    "lib/common.py", # exclude a single file
    "data/*.xml",    # exclude all XML files in a specific folder
    "example/**/*",  # exclude all files in a folder hierarchy recursively
    "**/*.scss",     # exclude all scss file from the module
]
模式 **/* 可用于忽略整个模块。这在排除某个模块以避免维护服务费用时非常有用。
有关模式语法的更多信息,请参阅 glob

使用 --path 选项

此方法与 –database 选项 的工作方式相同,如果在给定文件夹中存在一个 manifest 文件。否则,它将统计所有文件。

识别额外模块

为了区分标准模块和额外模块,Odoo Cloc 使用以下启发式方法:位于 basewebweb_enterprise 标准模块相同父目录下的模块(实际文件系统路径,跟随符号链接后)被视为标准模块。其他模块则被视为额外模块。

错误处理

某些文件无法被 Odoo Cloc 统计。这些文件会在输出的末尾被报告。

超过最大文件大小

Odoo Cloc 会拒绝大于 25MB 的文件。通常,源文件的大小都小于 1MB。如果文件被拒绝,可能是以下原因:

  • 一个包含大量数据的生成 XML 文件。它应在清单中被排除。

  • 一个应放置在 static/lib 文件夹中的 JavaScript 库。

语法错误

Odoo Cloc 无法统计具有语法问题的 Python 文件中的代码行数。如果某个额外模块包含此类文件,应予以修复以允许模块加载。如果模块在存在这些文件的情况下仍能正常运行,这些文件可能并未被加载,因此应从模块中移除,或至少通过 cloc_exclude 在清单中排除。

TSConfig 生成器

在使用 JavaScript 时,有一些方法可以帮助你的编辑器为你提供强大的自动补全功能。其中一种方法是使用 tsconfig.json 文件。该文件最初是为 TypeScript 设计的,但编辑器也可以将其信息用于纯 JavaScript。通过此配置文件,你现在可以在各个模块之间获得完整的自动补全功能。

生成这些文件的命令可以接受任意数量的未命名参数。这些参数是到你插件目录的相对路径。在下面的例子中,我们向上移动一个文件夹,以便将 tsconfig 文件保存在包含 community 和 enterprise 的文件夹中。

$ community/odoo-bin tsconfig --addons-path community/addons,community/odoo/addons,enterprise > tsconfig.json