Python中的命令行工具,用于更新/附加json配置文件

时间:2018-09-11 18:35:38

标签: python json python-3.x command-line-interface

要求

我正在创建一个Python3模块,希望将其移植到嵌入式板(使用Yocto)并使用setuptools,而不是在PyPi上。

我在主模块文件夹中有一个conf.json文件:

 myApp
| -- submodule-1
| -- submodule-2
| -- main.py
| -- conf.json

之所以选择conf.json文件,是因为Python Packaging tutorial提到了非代码文件

这变得有些复杂,因为据我了解,一旦安装了软件包(使用pip install .),到达目标文件夹就变得更加复杂:

/usr/local/bin/python3/dist-packages/myApp/myApp/conf.json

(与上面类似)

用法

  1. 在特定情况下,应用程序的用户最初会触发一些二进制文件来获取有关进程的一些相关信息,并需要稍后将它们添加到conf.json中。

数据:

configVals: {

   123453: {
      'type': 'engine-params',
      'baudrate': 115200,
      'baud': 500
   },
   245633: {
       // similar to above
   }
}

以上内容应通过结构中的各个键附加到conf.json上。

  1. conf.json中的信息更新为启用/禁用某些功能

数据:

 previously
 {
    "gps": {
        "active": true
     }
 }

 now 
 {
    "gps": {
       "active": false

     }
 }

计划

我正在考虑为用户制作命令行工具:

change-config  --system gps --key active --value false

 change-config --configVals --list {1234}

可能带有kwargsargParse,但发现kwargs不能像Python函数一样工作。

是否有一些开源实现与我的要求类似?

最后的度假胜地

我可以在conf.json中添加/etc/myApp/,用户可以在那里进行更新。

1 个答案:

答案 0 :(得分:1)

我觉得这个问题与python无关,而与软件部署/发行有关。我也很强烈地希望您在这里请求软件推荐而不是代码,因此我希望将其转移到Software Recs。无论如何,这是我的建议:

  1. 请勿在python软件包中包含配置文件。如果使用工具定位* nix系统,请从/etc/,用户主目录或环境变量中设置的某些文件中读取配置文件。所有这些都是访问配置文件的事实上方法,用户希望您的软件遵循其中的一种(就个人而言,当我不得不使用不需要配置文件的程序时,这让我很痛苦。遵守此约定)

  2. 要通过命令行操作JSON文件,请使用jq。如果要使用户的生活更轻松,可以编写自己的程序,该程序从命令行读取并保存到JSON文件中。我不知道使用python工具可以做到这一点,但是编写一个工具应该并不难。如果您要这样做。

    2.1使用click解析命令行。 2.2使用docopt,很简单

  3. 最后,我会告诉您遵守(1)中的建议,并且还允许您的用户使用自己喜欢的编辑器来编辑配置文件。 * nix用户非常满意手动编辑配置文件,使用sedperl或任何不暗示具有“配置工具”的方法。