odoo以开发者模式运行的话,能自动检测所有的addons目录的代码变动情况自动进行reload
这个机制对于python代码来说是够用的,但是对csv安全规则、xml数据及视图模版来说还需要更新模块才能使其生效
 
今天由于逐个测试安全规则条目,不断的手工更新模块不胜其烦,只好深入研究一下
 
odoo9开始已经将开发者模式依赖的pyinotify替换为watchdog,可能是后者的应用范围更广把,不仅提供python库,还附带shell工具
 
那就学习下这个叫watchmedo的命令行工具吧
 
 
(python)[srj@x1c odoo9]$ watchmedo --help
usage: watchmedo [-h] [--version]
                 
                 {tricks-from,tricks-generate-yaml,log,shell-command,auto-restart}
                 ...
 
positional arguments:
  {tricks-from,tricks-generate-yaml,log,shell-command,auto-restart}
    tricks-from         Subcommand to execute tricks from a tricks
                        configuration file. :param args: Command line argument
                        options.
    tricks-generate-yaml
                        Subcommand to generate Yaml configuration for tricks
                        named on the command line. :param args: Command line
                        argument options.
    log                 Subcommand to log file system events to the console.
                        :param args: Command line argument options.
    shell-command       Subcommand to execute shell commands in response to
                        file system events. :param args: Command line argument
                        options.
    auto-restart        Subcommand to start a long-running subprocess and
                        restart it on matched events. :param args: Command
                        line argument options.
 
optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
看到auto-restart参数后真是让人眼前一亮,根据提示继续学习二级参数
 
 
 
(python)[srj@x1c odoo9]$ watchmedo auto-restart -h
usage: watchmedo auto-restart [-h] [-d directory] [-p PATTERNS]
                              [-i IGNORE_PATTERNS] [-D] [-R]
                              [--interval TIMEOUT] [--signal SIGNAL]
                              [--kill-after KILL_AFTER]
                              command [arg [arg ...]]
 
    Subcommand to start a long-running subprocess and restart it
    on matched events.
 
    :param args:
        Command line argument options.
    
 
positional arguments:
  command               Long-running command to run in a subprocess.
  arg                   Command arguments. Note: Use -- before the command
                        arguments, otherwise watchmedo will try to interpret
                        them. (default: -)
 
optional arguments:
  -h, --help            show this help message and exit
  -d directory, --directory directory
                        Directory to watch. Use another -d or --directory
                        option for each directory. (default: -)
  -p PATTERNS, --pattern PATTERNS, --patterns PATTERNS
                        matches event paths with these patterns (separated by
                        ;). (default: '*')
  -i IGNORE_PATTERNS, --ignore-pattern IGNORE_PATTERNS, --ignore-patterns IGNORE_PATTERNS
                        ignores event paths with these patterns (separated by
                        ;). (default: '')
  -D, --ignore-directories
                        ignores events for directories (default: False)
  -R, --recursive       monitors the directories recursively (default: False)
  --interval TIMEOUT, --timeout TIMEOUT
                        use this as the polling interval/blocking timeout
                        (default: 1.0)
  --signal SIGNAL       stop the subprocess with this signal (default SIGINT)
                        (default: 'SIGINT')
  --kill-after KILL_AFTER
                        when stopping, kill the subprocess after the specified
                        timeout (default 10) (default: 10.0)
真是太强大了,本以为还要写点小代码什么的,没想到几个选项就可以灵活组合出一个小型的监控工具
 
 
1
watchmedo auto-restart -R -p="*.py;*.xml;*.csv" -d /home/srj/Git/Odoo/custom_addons/account_simple/ -- ./odoo.py -c c.conf -d test9 -u account_simple
-R是目录递归监控
-p是文件模式匹配,主要是排除前端资源和pyc
-d是指定监控目录
–是watchmedo与odoo各自的命令行参数分割线
 
至此odoo的模块开发效率又提高了一个层次:)