我目前正在进行一个手写识别的研究项目(我的学士论文)。到目前为止,我写了很多Python脚本,我想让它们对其他人有用。所以我在PyPI上创建了一个项目:https://pypi.python.org/pypi/hwrt/
目前,只有2个可执行脚本:backup.py
和{pip
安装时,我可以调用它们,这样可以:
$ backup.py --help
usage: backup.py [-h] [-d FOLDER] [-s] [-o]
Download raw data from online server and back it up (e.g. on dropbox)
handwriting_datasets.pickle.
optional arguments:
-h, --help show this help message and exit
-d FOLDER, --destination FOLDER
where do write the handwriting_dataset.pickle
(default: /home/moose/Downloads/write-math/archive
/raw-datasets)
-s, --small should only a small dataset (with all capital letters)
be created? (default: False)
-o, --onlydropbox don't download new files; only upload to dropbox
(default: False)
$ view.py --help
usage: view.py [-h] [-i ID] [--mysql MYSQL] [-m FOLDER]
Display a raw_data_id.
optional arguments:
-h, --help show this help message and exit
-i ID, --id ID which RAW_DATA_ID do you want?
--mysql MYSQL which mysql configuration should be used?
-m FOLDER, --model FOLDER
where is the model folder (with a info.yml)?
我是通过scripts
在setup.py
得到的:
不过,我更希望他们这样称呼:
$ hwrt backup --help
(just what came before for 'backup.py --help')
$ hwrt view --help
(just what came before for 'view.py --help')
$ hwrt --help
(a list of all sub-commands)
我知道这可以通过子命令和argparse来完成。但是,这意味着我必须创建一个新的脚本,在其中绑定argparse的所有命令。但我也希望脚本独立工作。我觉得调整命令行参数更符合逻辑,这些参数只在backup.py
中对backup.py
重要,而不在另一个文件中。在
有没有办法调整我的脚本,让它们“发现”bin文件夹中的脚本,并将它们全部添加为子命令?在
这可能是使用
parents
的情况。在例如,假设两个脚本在加载时都创建了一个
parser
对象(或者有一个创建解析器的函数):这应该打印适当的帮助。
args.cmd
将标识子命令,其他属性将是各自的参数。backup
子parser将是从backup.py
导入的解析器的克隆。(我还没有测试过这个脚本,所以可能有一些拼写错误或错误,但它给出了总体思路。)How to handle CLI subcommands with argparse讨论了处理子命令的几种方法。在
Ipython
使用argparse
处理主界面和许多魔术命令。它用配置文件中的参数和值填充解析器。这样,可以使用默认配置、自定义配置或在命令行上设置大量参数。在相关问题 更多 >
编程相关推荐