python - add_subparsers 无法识别 sub_argument

标签 python parameter-passing argparse subparsers

我正在尝试构建一个使用子解析器参数的脚本。但是,我无法将任何子参数作为参数传递。对于任何输入组合都会导致“无效选择:”。

输入示例:

python3 preprocess.py -d ../data/acm/ tf -l en

完整输出:

usage: preprocess.py [-h] [-k FOLDS] -d DATASETDIR [DATASETDIR ...] {tf} ...
preprocess.py: error: invalid choice: 'en' (choose from 'tf')

代码是

parser = argparse.ArgumentParser(description='Split input dataset into k folds of cross-validation.')

parser.add_argument('-k', '--folds', default=10, help='Number of folds for K fold cross-validation.', type=int)

required_args = parser.add_argument_group('required arguments')
required_args.add_argument('-d','--datasetdir', type=str, nargs='+', help='Dataset path (For more info: readme.txt)', required=True)

parser_subparsers = parser.add_subparsers(title="Representations", description="Choose the representations")
parser_tf = parser_subparsers.add_parser('tf', help='TF helper')
parser_tf.add_argument('-l', '--language', type=str, help='Language', default='en', choices=['en'])
parser_tf.add_argument('-s', '--stopword', type=bool, help='Skip stopwords', default=True)

args = parser.parse_args()

最佳答案

由于 --datasetdir 具有 nargs="+",其他参数将被作为附加数据集目录,而不是调用子解析器。

CLI 建议:将 datasetdir 更改为普通的旧位置参数,能够使用 os.pathsep 分隔路径。将 argparse 转化为您想要做的事情会很困难,并且使用带有 required=True 的可选参数首先就是一种代码味道。

新界面将如下所示:

python3 preprocess.py ../data/acm/:/dir2:/dir3 tf -l en

关于python - add_subparsers 无法识别 sub_argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55226837/

相关文章:

python - 停止运行代码

python - 如何迭代配对值,以及如何从您正在使用的列表中命名变量?

c - 将变量函数 v->x 传递给 int main function()

jsf - 如何在另一个托管 bean 中访问一个托管 bean 的属性

python - Argparse -- 在帮助字符串中添加可选参数

python - 如何将 numpy 矩阵的列移动到最后一列?

python - 如何检测使用 Paramiko invoke_shell 执行的命令是否已完成

C++,指向函数的指针作为新类型

Python:argparse 子命令子命令?

python - argparse 有没有办法允许第一个位置参数不仅是无破折号,而且是多个可能的用户输入值之一?