【问题标题】:How to pass a list/array as argument to python fire?如何将列表/数组作为参数传递给python fire?
【发布时间】:2019-06-30 14:35:11
【问题描述】:

我有这样的功能-

def my_func(my_list_arg=["one", "two"]):

我正在尝试使用 python-fire 从命令行调用。

我尝试了几种方法-


尝试 1:

fire_runner.py my_func [one, two]

导致两个单独的参数 "[one""two]"


尝试 2:

fire_runner.py my_func ["one", "two"]

结果相同。


尝试 3:

fire_runner.py my_func [\"one\", \"two\"]

同样的结果。

【问题讨论】:

    标签: python python-fire


    【解决方案1】:

    您的列表将首先由命令行 shell 解析。这意味着您需要将其强制为单个参数。有很多方法可以做到这一点:

    1. 没有空格:[one,two]

    2. 逃离空间:[one,\ two]

    3. 引用:"[one, two]"

    请注意,您可以使用以下语法修改函数以获取参数列表:

    def my_func(*args):
    

    这里的名称args 是约定俗成的,但它只是一个变量名,所以它可以是任何东西。这将允许您将函数调用为

    fire_runner.py my_func one two
    

    【讨论】:

    • 奇怪的是,如果参数包含句号,顶部的 3 种方法似乎都不适合我。它再次将列表参数视为单个字符串。重现:fire_runner.py my_func [one,two.two](或其他选项之一)
    • @JamesOwers 括号或点可能对 shell 有特殊含义。我建议阅读有关如何为您正在使用的特定 shell 转义特殊字符的信息。
    • 好点 - 我只是使用bash。但是,鉴于您将得到的错误是:KeyError: '[one,two.two]',我们可以推断句号进入命令 ok。一个笨拙的解决方案是引用键和列表:fire_runner.py my_func "['one','two.two']"
    【解决方案2】:

    逗号对我有用后不保留任何空格。

    fire_runner.py my_func [one,two]
    

    【讨论】:

    • 或者,尝试在列表周围加上引号。
    【解决方案3】:

    仅针对特殊情况添加此答案。

    假设你的函数是这样的:

    def my_func(dates: List[str] = []):
        ...
    

    如果您需要从 CLI 发送日期列表(或数字和字符的任意组合),则以下不会起作用。

    fire_runner.py my_func --dates 2021-09-20,
    fire_runner.py my_func --dates "[2021-09-20]"
    fire_runner.py my_func --dates [2021-09-20]
    

    在上述所有情况下,日期将被读取为一个字符串而不是字符串列表。为了正确阅读字符串列表,您可以使用以下内容。

    fire_runner.py my_func --dates "[\"2021-09-20\"]"
    fire_runner.py my_func --dates "[\"2021-09-20\", \"2021-09-76\"]"
    

    【讨论】:

      【解决方案4】:

      Fire 将逗号分隔的数字字符串转换为元组,如下所示:

      fire_runner.py my_func  1,2,3
      

      对于逗号分隔的字符串,您可以使用:

      fire_runner.py my_func  \'2021-2\',\'20212-3\',\'2023-4\'
      

      【讨论】:

        猜你喜欢
        • 2021-09-21
        • 2021-06-01
        • 2019-03-02
        • 2014-12-17
        • 1970-01-01
        • 2013-01-24
        • 2013-04-21
        • 1970-01-01
        • 2022-01-02
        相关资源
        最近更新 更多