将带有空白字符的参数传递给 argparse

Passing an argument with whitespace characters into argparse

我的 Python 脚本:

import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--l', nargs='+', help='list = [title, HTML]')
args = parser.parse_args()
print args.l

当我在 Keyboard Maestro 中执行脚本时,我是这样做的:

python  ~/Desktop/save_html.py -l $KMVAR_javascriptTITLE

它在工作,但 argparse 正在解析任何带有 space 的内容。

First Name变成['First', 'Last']。如果我理解正确,arparse 正在读取我的命令,如:

python ~/Desktop/save_html.py -l First Last

当我真正想要的是:

python ~/Desktop/save_html.py -l "First Last"

如何将变量传递给 argparse 并将其读取为 1 个字符串?

正在将我的评论更改为答案

如果你python ~/Desktop/save_html.py -l "$KMVAR_javascriptTITLE"怎么样?必要时转义引号

您可以使用 CustomAction 来执行此操作:

import os
import argparse


class CustomAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        setattr(namespace, self.dest, " ".join(values))


parser = argparse.ArgumentParser()
parser.add_argument('-l', '--l', action=CustomAction, type=str, nargs='+', help='list = [title, HTML]')
args = parser.parse_args()
print args.l