从命令行传递参数作为列表并解析它
Posted
技术标签:
【中文标题】从命令行传递参数作为列表并解析它【英文标题】:Pass arguments from command line as a list and parse it 【发布时间】:2020-06-21 14:45:34 【问题描述】:我有以下代码:
import arg
parser = arg.ArgumentParser(description="<%=@project_name%> Command Line.")
parser.add_argument(
"--inputs", "-i", help="input files.", default="./",
)
parser.add_argument(
"--controls", "-c", help="Parms.", default=False
)
parser.add_argument(
"--outputs", "-o", help="output files.", default="./"
)
我只是简单地运行代码
python code.py -i ./ -o ./
只是想知道如何将参数列表作为参数传递并在 python 中解析它?比如:
python code.py -i ./ -o ./ -c [False, 5, 'aStr']
【问题讨论】:
不应该import arg
是import argparse
?
您可以传递一个逗号分隔的值列表。例如“python code.py a b c d,e,f”然后sys.argv[4].split(",")
看看sys.argv
,这样你就明白这些字符串是如何被shell分割的。您可能需要更多报价。解析器从argv
工作。
接受"python code.py -i ./ -o ./ -c False 5 aStr"
怎么样。 '[' 和 ',' 使解析更加困难。
【参考方案1】:
在命令行中引用参数:
python code.py -i ./ -o ./ -c "[False, 5, 'aStr']"
然后使用ast.literal_eval()
解析它的值。
import ast
...
controls = ast.literal_eval(parser.controls)
【讨论】:
以上是关于从命令行传递参数作为列表并解析它的主要内容,如果未能解决你的问题,请参考以下文章
python argh/argparse:如何将列表作为命令行参数传递?