Odoo - 如何在python解释器中以交互方式使用它?

时间:2015-07-31 05:30:48

标签: python terminal odoo

我在这里读到可以使用python解释器来访问Odoo并以交互方式测试事物(https://www.odoo.com/forum/help-1/question/how-to-get-a-python-shell-with-the-odoo-environment-54096),但是在终端中执行此操作:

ipython

import sys
import openerp
sys.argv = ['', '--addons-path=~/my-path/addons', '--xmlrpc-port=8067', '--log-level=debug', '-d test',]
openerp.cli.main()

它启动了Odoo服务器,但我无法在该终端选项卡中编写任何内容以交互方式使用它。例如,如果我写了print 'abc'之类的内容,我就不会得到任何输出。我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:0)

有时我在控制台/终端上使用“logging”库进行打印输出。

例如:

import logging
logging.info('Here is your message')
logging.warning('Here is your message')

有关详情,请查看此reference link.

答案 1 :(得分:0)

我发现最接近互动的是

import pdb; pdb.set_trace()

在我要检查的方法中,然后触发该方法。

它很笨重但是有效。

作为一个例子,我只是为我们的OpenERP副本增强了OpenChatter实现,并在"中解决问题"阶段我在.../addons/mail/mail_thread.py::mail_thread.post_message中有这一行,所以我可以更好地了解该方法中发生的事情。

答案 2 :(得分:0)

正确的方法是使用shell:

./odoo-bin shell -d <yourdatabase>

请注意,如果您已经有一个odoo实例,则该端口将处于繁忙状态。在这种情况下,您要打开的实例应使用其他端口。所以命令应该是这样的:

./odoo-bin shell --xmlrpc-port=8888 -d <yourdatabase>

但是,如果您想在新实例中使用附加组件,则可以进行以下类似操作:

./odoo-bin shell -c ~/odooshell.conf -d <yourdatabase>

这样,您可以在odooshell.conf中拥有需要配置的任何内容(端口,addons_path等)。这样,您就可以顺利使用外壳。

因为我一直使用docker,所以要做的是在docker中配置我的shell:

docker exec -ti <mycontainer> odoo shell -c /etc/odoo/odooshell.conf -d <mydatabase>

您将可以使用env进行任何操作。您可以创建明确的python代码来完成所需的任何操作。语法与服务器操作非常相似。例如:

partner_ids = env['res.partner'].search([])
for partner in partner_ids:
    partner['name'] = partner.name + '.'
env.cr.commit()

如果您进行任何数据更改,请记住env.cr.commit()