最近需要编写一个能接收外来参数的文件,在网络上进行搜索学习后发现有两个问题,一个是网上的教程都是直接调用argv[1] argv[2]这样子的,我如果想要指定参数比如–label xxx这样的,需要怎么做呢,还有就是接收了外部参数以后,需要根据这些外部参数对本地参数重新进行赋值。我想到的解决方法就是以字典的形式对sys.argv进行解析或得输入参数的字典,然后再使用global()方法对这些本地变量进行赋值操作。
注意输入的时候有可能输入的数据是数字,需要对这部分先进行一个判断
def to_number(s):
#判断是否是数字,返回字符串转化的数字
try:
if '.' in s:
float(s)
return float(s)
else:
int(s)
return int(s)
except ValueError:
return s
def get_input_args_dict(input_args=['']):
# 输入参数,获取返回的参数字典
args_dict = {}
count = 0
for each_str in input_args:
if each_str.startswith('--'):
current_args = input_args[count + 1]
current_args = to_number(current_args)
if current_args == 'True':
current_args = True
if current_args == 'False':
current_args = False
args_dict.update({each_str[2:]: current_args})
count += 1
return args_dict
调用的时候,只需要根据对应的参数,从字典里取值再赋值即可
samples_dir = "../data/black_samples/"
model_path='../model/Malconv_single.model'
result_path='pred.csv'
input_args_dict=get_input_args_dict(sys.argv)
for each_args in input_args_dict:
if input_args_dict.get(each_args) is not None:
globals()[each_args] = input_args_dict.get(each_args)