簡體   English   中英

如何將列表/數組作為參數傳遞給python fire?

[英]How to pass a list/array as argument to python fire?

我有這樣的功能-

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\"]

同樣的結果。

您的列表將首先由命令行 shell 解析。 這意味着您需要將其強制為單個參數。 有很多方法可以做到這一點:

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

  2. 逃離空間: [one,\ two]

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

請注意,您可以使用以下語法修改函數以獲取參數列表:

def my_func(*args):

這里的名稱args是約定俗成的,但它只是一個變量名,所以它可以是任何東西。 這將允許您將您的函數稱為

fire_runner.py my_func one two

逗號對我有用后沒有保留任何空格。

fire_runner.py my_func [one,two]

僅針對特殊情況添加此答案。

鑒於您的功能是這樣的:

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\"]"

Fire 將逗號分隔的數字字符串轉換為元組,如下所示:

fire_runner.py my_func  1,2,3

對於逗號分隔的字符串,您可以使用:

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

一個元素列表添加特殊的極端情況解決方案,因為上述語法似乎不起作用(列表被解析為以[開頭的字符串):

fire_runner.py my_func "['one']"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM