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)

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 將從第一個短選項字符串中刪除首字母 - 字符得出。
添加回答
舉報