将 sys.argv 转换为位置 argparse 参数?

问题描述

我有一个当前采用 sys.argvargparse 参数的脚本。我需要将 sys.argv 输入更改为位置 argparse 参数。我该怎么做?

脚本(省略不相关部分):

import sys
import argparse
from pathlib import Path

parser = argparse.ArgumentParser()

parser.add_argument("-ru","--remove-unparsable",dest="remove_unparsable",action="store_true",help="When this option is enabled,unparsable fonts are "
                         "removed instead of ignored")

args,unkNown = parser.parse_kNown_args()

def handle_path(path: Path):
    if path.stem.startswith("."):
        return
    if path.is_dir():
        for f in path.iterdir():
            handle_path(f)
    else:
        handle_file(path)

def main():
    if len(sys.argv) == 1:
        print(f"Usage: {sys.argv[0]} [<files>]")
    else:
        for path in sys.argv[1:]:
            if not path.startswith("-"):
                handle_path(Path(path))


if __name__ == "__main__":
    main()

解决方法

您可以执行以下操作:

def main():
    parser = argparse.ArgumentParser()
    
    parser.add_argument("-ru","--remove-unparsable",dest="remove_unparsable",action="store_true",help="When this option is enabled,unparsable fonts are "
                        "removed instead of ignored")
    parser.add_argument("files",nargs="+")
    args,unknown = parser.parse_known_intermixed_args()
    for path in args.files:
        handle_path(Path(path))

此处,ArgumentParser.parse_known_intermixed_args 处理位置 files 参数,它可以与命名参数(例如 -ru 和未知参数)混合。 nargs="+" 参数指定必须至少存在一个文件。