如何解决将参数传递给python应用程序?
我有一个python3应用程序,我想使用Ubuntu 18.04终端向它传递一些参数:
events: {
afterSetExtremes: function(e) {
if (this.chart.xAxis[1].max - this.chart.xAxis[1].min < 36e8) {
this.update({
tickInterval: 36e7
})
} else {
this.update({
tickInterval: undefined
})
this.chart.xAxis[1].update({
tickInterval: undefined
})
}
}
}
我正在尝试使用argparse:
python3 app/app.py -af app/annotation_file.json -em app/model/ -output_dir app/new_model/ -n_iter 100
输出:
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",help="Retrain existing model or train from scratch")
parser.add_argument("-output_dir","--output_dir_to_save_model",default="/app/model",help="Path to save newly generated NER model")
parser.add_argument("-n_iter","--num_iter",default=100,help="Number of iterations to train the model")
args = parser.parse_args()
print(args)
main(args)
但是我没有得到输出。
如何将以上所有命名参数传递给我的Namespace(main='100')
Namespace(main='100')
函数?
解决方法
好的,因此,您可以将参数传递给该函数,但是由于解析器的每一行都将输入数据保存到:
dest="main"
每个新的parser.add_argument行都会覆盖您的主变量。
如果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",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.arg4)
,
我将清理您的解析器定义(我删除了dest
,并修复了short选项标志):
parser = ArgumentParser()
parser.add_argument("-a","--af",help="Path to annotated file")
parser.add_argument("-e","--em",help="Retrain existing model or train from scratch")
parser.add_argument(+-o","--output_dir",help="Path to save newly generated NER model")
parser.add_argument("-n","--n_iter",help="Number of iterations to train the model")
args = parser.parse_args()
print(args)
现在,您将在namespace
中看到所有4个参数,并可以按名称访问它们
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通过获取第一个long选项字符串并去除初始的-字符串来生成dest的值。如果未提供长选项字符串,则将通过删除首字母-从第一个短选项字符串派生dest。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。