【问题标题】:Handing options with a comma with python's argparse使用 python argparse 用逗号悬挂选项
【发布时间】:2013-06-24 01:58:10
【问题描述】:

我正在编写一个充当 GCC 包装器的 python 脚本。 GCC 采用的大多数选项都可以直接使用 argparse 处理,但我正在努力使用“-Wl,option”选项。我希望它在逗号之后存储所有内容,所以我尝试了以下操作:

parser = argparse.ArgumentParser()
parser.add_argument("-Wl,", help="Option to pass to linker.")
known, unknown = parser.parse_known_args()
print(known)
print(unknown)

但是,如果我按如下方式运行脚本:

python foo.py -Wl,foo

我得到以下输出:

Namespace(E=False, S=False, Wl,=None, c=False, optimization=None, shared=False, target=None)
['-Wl,foo']

这表明它无法识别 -Wl 选项。

我可以将 add_argument 行更改为:

parser.add_argument("-W", help="Option to pass to linker.")

这可行,将“l,foo”存储在 W 选项中,但 GCC 使用 -W 作为警告标志,我希望将它们与 -Wl 选项分开。

我可以遍历未知参数列表并以这种方式处理它们,但我希望有一个更优雅的问题解决方案。有什么建议吗?

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    在将它们传递给 argparse 之前,您可以在所有 args 上按照简单的 .replace(',',', ').replace(',',',=') 做一些事情。我认为其中一个应该可以解决问题。

    【讨论】:

    • 虽然我没有完全按照你的做法做,但我确实采用了有针对性的字符替换:s.replace("-Wl","-Wl=")
    【解决方案2】:

    您应该可以使用 CustomAction 解决此问题。 http://pymotw.com/2/argparse/ 有一个很好的例子来说明如何做到这一点。

    【讨论】:

    • 问题是 CustomAction 不会被调用,除非我有 "-Wl,=foo"。
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2019-04-25
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2013-03-20
    • 2020-10-12
    相关资源
    最近更新 更多