Python argparse - 从 cmdline 读取引号内的多个字符串

Posted

技术标签:

【中文标题】Python argparse - 从 cmdline 读取引号内的多个字符串【英文标题】:Python argparse - reading multiple strings within quotes from cmdline 【发布时间】:2021-05-25 05:53:09 【问题描述】:

我正在尝试解析不确定数量的命令行参数,但它们可能是空格分隔的。所以对于例如

./program.py "IBM US Equity" "FB US Equity" 

应该返回一个包含两个元素的参数列表

["IBM US Equity", "FB US Equity"]

然而我最终得到的是

["IBM", "US", "Equity", "FB", "US", "Equity"]

有没有办法告诉 argparse 将引号内的字符串视为一个参数?我正在使用

nargs='+'

这是定义我的 args 架构的 yaml:

    args:
  ticker_list:
    help: Compute result for list of tickers entered after this. All tickers must
      be in quotation delimited strings, e.g. "IBM US Equity"
    nargs: '+'
    metavar: ticker
  

这是我在阅读 yaml 后将其添加到 argparse 的方法:


with open("reg_test_config.yml") as in_file:
    params = yaml.safe_load(in_file)
    for name, configs in params.pop("args").items():
        parser.add_argument(name, **configs)

【问题讨论】:

您不需要argparse。只需使用os.argv 默认将引用的参数视为单个项目。你必须做一些事情来告诉它分裂它们。发布您的代码。 查看sys.argv 列表。这就是parser.parse_args() 所看到的。 argparse 不会拆分该列表中出现的字符串。 请edit 也显示读取参数的代码部分,而不仅仅是解析器定义。 【参考方案1】:

您只需使用以下代码即可:

import sys

all_inputs = [sys.argv[1], sys.argv[2]]

print(all_inputs)

只需在终端中将上述代码作为 python 文件运行并传递您的字符串。

【讨论】:

这是 print(sys.argv) 返回的['./gen_report.py', 'IBM', 'US', 'Equity', 'FACC', 'US', 'Equity'] @ZeeshanHanif 您是如何准确地运行 Python 脚本的?因为这里的答案works as expected,所以引用的字符串被视为 1 个参数。不能说是什么,但你在命令行中传递参数的方式或解析参数的方式一定有什么。 您没有按照您在问题中的建议使用引号来调用您的脚本。相反,您正在做类似./gen_report.py IBM US Equity FACC US Equity 的事情。

以上是关于Python argparse - 从 cmdline 读取引号内的多个字符串的主要内容,如果未能解决你的问题,请参考以下文章

python中的argparse

python内置库--argparse

使用 argparser 将参数传递给入口点 python 脚本

从 subprocess.Popen 将参数传递给 argparse

Python Argparse 多次使用相同的参数

python 笔记:argparse