【发布时间】:2020-08-06 11:20:32
【问题描述】:
我正在尝试为 Python 编写一个可以像这样运行的命令行工具..
orgtoanki 'b' 'aj.org' --delimiter="~" --fields="front,back"
这是脚本:
#!/usr/bin/env python3
import sys
import argparse
from orgtoanki.api import create_package
parser = argparse.ArgumentParser()
parser.add_argument('--fields', '-f', help="fields, separated by commas", type=str, default='front,back')
parser.add_argument('--delimiter', '-d', help="delimiter", type= str, default='*')
args = parser.parse_args()
name=sys.argv[1]
org_src=sys.argv[2]
create_package(name, org_src, args.fields, agrs.delimiter)
当我运行它时,我收到以下错误:
usage: orgtoanki [-h] [--fields FIELDS] [--delimiter DELIMITER]
orgtoanki: error: unrecognized arguments: b aj.org
为什么 'b' 和 'ab.org' 不被分别解释为 sys.argv[1] 和 sys.argv[2]?
如果没有向命令行提供字段和分隔符,默认设置是否会按我的预期工作?
【问题讨论】:
-
Argparse 不知道您自己对 sys.argv 做了什么,或者这消除了它处理这些部分的责任。你为什么不也通过 argparse 获取两个位置参数?
-
换种说法,既然你问“为什么不?”:请澄清为什么你认为 argparse 应该知道手动处理 args 1 和 2(尤其是在解析之后)?
-
@MisterMiyagi 我实际上并不认为 argparse 应该知道
sys.arg处理位置参数。也许问题标题让你这么想。例如,我不是在问为什么 argparse 不将 b 解释为 argparse 变量。 -
那么问题是什么?目前,它指出“为什么不将'b'和'ab.org'分别解释为sys.argv[1]和sys.argv[2]?”。唯一不能“正确”解释 sys.argv[1] 和 sys.argv[2] 的是 argparse,因此会抛出错误。
标签: python command-line-interface argparse