我在这里读到可以使用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'
之类的内容,我就不会得到任何输出。我在这里错过了什么吗?
答案 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()
。