簡體   English   中英

在Python 2.7中使用argparse時,如何傳遞比'args'更多的參數到我的默認函數中?

[英]When using argparse in Python 2.7, how can I pass more than 'args' into my default function?

我正在嘗試將一些參數傳遞給解析器的默認函數,該函數並非直接來自命令行中的參數。 用戶在cli上提供的參數旨在查詢所需的實際值,因為用戶不一定會重復輸入真實值。

使用argparse,您可以執行以下操作:

parser = argparse.ArgumentParser()
def test_function(args):
    print args

Parser.set_defaults(func=test_function)
args = parser.parse_args()
args.func(args)

test_function將在此處成功打印出參數。 注意如何

(func=test_function)

不會傳入任何參數,似乎只是傳入args,在此處添加括號可防止傳入args,因為如果您這樣做,它不會自動推送,並且由於尚未輸入args而無法輸入就Python而言尚未定義。

我也嘗試過

Parser.set_defaults(func=test_function, realValue=lookup_function)

但是,realValue似乎是在對函數本身的引用進行評估,而不是對函數返回的值進行評估(我認為該函數甚至不會執行,因此我不確定這是否會將args傳遞給lookup_function)。

可能可以從test_function調用lookup函數,但是我想避免這種情況,因為在我的程序中,這兩個函數位於單獨的模塊中,似乎有點...將它們相互導入而不是簡單地將它們都導入都比較麻煩到我的main.py文件中。

有人知道我要做什么嗎? 我需要吸收它並導入跨子模塊嗎?

編輯為了更清楚一點,我想通過argparse的功能將args 另一個動態值傳遞給test_function。

    Parser.set_defaults(func=test_function)

動態值是使用args值之一找到的。 我想知道一種傳遞給test_function或args本身的方法,它是另一個函數返回的新值。

我最終找到了自己的方式,我當時正在尋找一些非常簡單的東西。 由於某種原因,我沒有將這兩個因素結合在一起。

   Parser.set_defaults(func=test_function)
args.func(args)

我認為這是argparse模塊中的內置功能,但是它比看起來簡單得多。 我找到了一種方法,可以通過遵循正確的語法(本來會想到的)將新值添加到args中

所以這:

parser = argparse.ArgumentParser()
def test_function(args):
    print args

Parser.set_defaults(func=test_function, realValue=lookup_function)
args = parser.parse_args()
args.func(args)

變成這個:

parser = argparse.ArgumentParser()
def test_function(args):
    print args

Parser.set_defaults(realValue=lookup_function)
Parser.set_defaults(func=test_function)
args = parser.parse_args()
args.realValue(args)
args.func(args)

對不起,我想這個愚蠢的問題,希望這對以后犯類似錯誤的人有所幫助

這是您僅將args傳遞給args.func

args.func(args)
#         ^^^^ this bit!

如果要將其他內容傳遞給args.func ,只需將它們傳遞!

args.func(whatever, the, heck, you, want)

如果希望args.func接收3"fish""sweaters" args.func "sweaters"作為參數,則可以執行以下操作:

args.func(3, "fish", "sweaters")

args.func會立即阻塞這些參數,因為您編寫它只是希望將名稱空間對象作為參數。 您可以定義它以采用不同的參數:

def test_function(number, animal, garments):
    print("I stuffed", number, garments, "into a big rubber", animal, "as an art project.")

暫無
暫無

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

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