亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將參數傳遞給 python 應用程序?

將參數傳遞給 python 應用程序?

拉莫斯之舞 2023-09-02 16:21:59
我有一個 Python3 應用程序,我想使用 Ubuntu 18.04 終端向它傳遞一些參數:python3 app/app.py -af app/annotation_file.json -em app/model/ -output_dir app/new_model/ -n_iter 100我正在嘗試使用 argparse 來做到這一點:if __name__ == "__main__":    from argparse import ArgumentParser    parser = ArgumentParser()    parser.add_argument("-af", "--annotation_file",                        dest="main", default=None,                        help="Path to annotated file")    parser.add_argument("-em", "--existing_model_path",                        dest="main", default=None,                        help="Retrain existing model or train from scratch")    parser.add_argument("-output_dir", "--output_dir_to_save_model",                        dest="main", default="/app/model",                        help="Path to save newly generated NER model")    parser.add_argument("-n_iter", "--num_iter",                        dest="main", default=100,                        help="Number of iterations to train the model")    args = parser.parse_args()    print(args)    main(args)輸出:Namespace(main='100')Namespace(main='100')但我沒有得到輸出。如何將上述所有命名參數傳遞給我的main()函數?
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

好的,所以,您可以將參數傳遞給函數,但是由于解析器的每一行都將輸入數據保存到:


dest="main"

對于每個新的 parser.add_argument 行,您的 main 變量都會被覆蓋。


如果您的 main() 函數采用四個參數,請將每個 parser.add_argument() 行的 dest="" 行更改為指向不同的變量,然后使用以下命令調用您的 main() 函數:


main(args.arg1, args.arg2, args.arg3, args.arg4)

其中 arg-n 是每個新創建的不同變量。


例如,給定您的代碼:


if __name__ == "__main__":

    from argparse import ArgumentParser


    parser = ArgumentParser()

    parser.add_argument("-af", "--annotation_file",

                        dest="arg1", default=None,

                        help="Path to annotated file")

    parser.add_argument("-em", "--existing_model_path",

                        dest="arg2", default=None,

                        help="Retrain existing model or train from scratch")

    parser.add_argument("-output_dir", "--output_dir_to_save_model",

                        dest="arg3", default="/app/model",

                        help="Path to save newly generated NER model")

    parser.add_argument("-n_iter", "--num_iter",

                        dest="arg4", default=100,

                        help="Number of iterations to train the model")


    args = parser.parse_args()

    print(args)

    main(args.arg1, args.arg2, args.arg3, args.arg4)


查看完整回答
反對 回復 2023-09-02
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

我會清理你的解析器定義(我刪除了dest, 并修復了短選項標志):


parser = ArgumentParser()

parser.add_argument("-a", "--af", "--annotation_file",

                    help="Path to annotated file")

parser.add_argument("-e", "--em", "--existing_model_path",

                    help="Retrain existing model or train from scratch")

parser.add_argument(+-o", "--output_dir", "--output_dir_to_save_model",

                    default="/app/model",

                    help="Path to save newly generated NER model")

parser.add_argument("-n", "--n_iter", "--num_iter",

                    default=100,

                    help="Number of iterations to train the model")


args = parser.parse_args()

print(args)

現在您將看到 中的所有 4 個參數namespace,并且可以通過名稱訪問它們


args.n_iter

args.output_dir

通常,它dest取自雙破折號標志之一。args您最終將轉到的事實main()與 無關argparse。您為所有 4 個參數提供相同的參數,搞亂了解析器dest,結果您只看到其中一個的值。


如文檔所述,您可以輕松獲得字典版本


vars(args)

https://docs.python.org/3/library/argparse.html#dest


對于可選參數操作,dest 的值通常是從選項字符串推斷出來的。ArgumentParser 通過獲取第一個長選項字符串并去掉初始的 -- 字符串來生成 dest 的值。如果未提供長選項字符串,則 dest 將從第一個短選項字符串中刪除首字母 - 字符得出。


查看完整回答
反對 回復 2023-09-02
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號