#config-file #convert #json #style #gnu #json-file #string

app config2args

一个将配置文件转换为 GNU 选项风格字符串的命令行工具

3 个不稳定版本

使用旧 Rust 2015

0.2.0 2019年3月22日
0.1.1 2019年3月5日
0.1.0 2019年2月28日

#gnu 中排名 40

MIT 许可证

12KB
176 代码行

crate-name at crates.io Build Status

关于此仓库

这是一个命令行工具,它将配置文件(目前仅支持 JSON)转换为 GNU 选项风格字符串

示例

$ cat test.json
{
    "key1": 1,
    "key2": "hello",
    "key3": [2,3,4],
    "key4": 1.4,
    "key5": null,
    "a": "b"
}
$ config2args test.json
--key1 1 --key2 hello --key3 2 3 4 --key4 1.4 --key5 -a b

如何安装

需要 1.32.0 版本的 cargo。使用 rustup 安装 Rust 构建工具是一种好方法。

$ cargo install config2args

如何在本地构建

需要 1.32.0 版本的 cargo。使用 rustup 安装 Rust 构建工具是一种好方法。

$ git clone [email protected]:serihiro/config2args.git
$ cd config2args
$ cargo build --release

特性

支持将 JSON 文件用作配置文件

  • 未来可能支持 YAML?

支持长键名(带 --)和短键名(带 -

$ cat test.json
{
    "k": 1,
    "key": "hello"
}
$ config2args test.json
-k 1 --key hello

支持字符串(包括数字)和数组

$ cat test.json
{
    "key1": "a",
    "key2": 1,
    "key3": 1.4,
    "key4": ["a", "b", "c"],
    "key5": [1, 1.4, "c"]
}
$ config2args test.json
--key1 a --key2 1 --key3 1.4 --key4 a b c --key5 1 1.4 c

支持忽略键名

$ cat test.json
{
    "_key1": "a",
    "_key2": "b",
    "key3": "c"
}
$ config2args test.json
a b --key3 c

支持不仅是 JSON 对象,例如 "aaaa"[1, 2, 3]

$ cat test.json
"abcd"
$ config2args test.json
abcd
$ cat test.json
[1,2,3]
$ config2args test.json
1 2 3

支持嵌套对象

$ cat test.json
{
    "key1": 1,
    "key2": 2,
    "key3": 3,
    "key4": {
        "k1" : 4,
        "k2" : 5,
        "a": 6
    },
    "z": {
        "key5": 7,
        "b": 8
    }
}
$ config2args test.json
--key1 1 --key2 2 --key3 3 --key4.k1 4 --key4.k2 5 --key4.a 6 --z.key5 7 --z.b 8

支持 tera 模板引擎

如果输入文件的文件名以 .tera 结尾,则该文件将被评估为 tera 模板。

$ cat test.json.tera
{
    "_setup_variable_for_tera": "{% set my_var = now() | date(format=\"%Y%m%d%H%M%S\") %}",
    "output": "logs/{{my_var}}"
}
$ config2args test.json.tera
--output logs/20190323005419

动机

在许多情况下,机器学习脚本都是用许多 CLI 选项实现的。
例如,我经常像这样执行一个 Python 脚本

$ python train_imagenet.py \
  "$imagenet1k_base/train.ssv" \
  "$imagenet1k_base/val.ssv" \
  --root "$imagenet1k_base" \
  --mean "$imagenet1k_base/mean.npy" \
  --gpu 0 \
  --arch resnet50 \
  --batchsize "$batch_size" \
  --val_batchsize "$batch_size" \
  --epoch "$epoch" \
  --loaderjob 2 \
  --out "$output_path"

当然,这是写在一个 shell 脚本中的。但这种风格不易阅读和更新 :-(

因此,我想以更舒适的格式管理这些选项,例如 JSON 或 YAML。

$ python train_imagenet.py `config2args config.json`

许可证

MIT

依赖关系

~11–15MB
~293K SLoC