[英]combining argsparse and sys.args in Python3
我正在嘗試為 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
解析器引起的,它無法理解命令的'b' 'aj.org'
部分,並且您的代碼永遠不會到達帶有sys.argv
的行。 嘗試將這些 arguments 添加到argparse
並避免同時使用argparse
和sys.argv
:
parser = argparse.ArgumentParser()
# these two lines
parser.add_argument('name', type=str)
parser.add_argument('org_src', type=str)
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()
然后,您可以分別在args.name
和args.org_src
訪問它們的值。
parser.parse_args
的默認輸入是sys.argv[1:]
。
usage: orgtoanki [-h] [--fields FIELDS] [--delimiter DELIMITER]
orgtoanki: error: unrecognized arguments: b aj.org
錯誤消息由argparse
打印,然后是 sys 退出。
該消息意味着它在sys.argv[1:]
中找到了未被編程識別的字符串。 您只告訴它“--fields”和“--delimiter”標志。
您可以按照其他人的建議添加兩個位置字段。
或者你可以使用
[args, extras] = parser.parse_known_args()
name, org_src = extras
extras
應該是一個列表['b', 'aj.org']
,即無法識別的 arguments,您可以將其分配給您的 2 個變量。
解析器(通常)不會使用和修改sys.argv
。 所以幾個解析器( argparse
或其他)可以讀取相同的sys.argv
。 但要使其發揮作用,他們必須寬容他們不需要或不認識的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.