使用这段代码收集命令行参数,我想使用ENV变量提供参数,但替换没有按预期方式进行。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-m", default=[], nargs="+")
args = parser.parse_args()
print(args)
$ python test.py -m a1 a2
输出:
命名空间(m=[a1','a2'](
$ ARGS="a1 a2"; python test.py -m $ARGS
输出:
命名空间(m=[a1b1'](
所以,问题是,我如何使用ENV变量提供-m,以便argparse将其识别为数组,而不是单个arg?谢谢(我在这里使用zsh(
之所以会发生这种情况,是因为zsh默认情况下不拆分变量,但您可以设置SH_WORD_SPLIT
变量,使其行为类似于bash。
SH_WORD_SPLIT=1 M="1 2 3" python3 mcve.py -m $M
Namespace(m=['1', '2', '3'])
如果您不想这样做,您总是可以手动拆分传递的参数,但这首先违背了ArgumentParser
的目的。