2016-04-18 2 views
1

Python имеет простой способ чтения параметров из файла:Файл параметров в ArgParse.jl? argparse

https://docs.python.org/2/library/argparse.html#fromfile-prefix-chars

Вместо того чтобы передавать свои аргументы один за другим:

python script.py --arg1 val1 --arg2 val2 ... 

Вы можете сказать:

python script.py @args.txt 

, а затем аргументы считываются с args.txt.

Есть ли способ сделать это в ArgParse.jl?

P.S .: Если для этого не существует способа «по умолчанию», возможно, я могу сделать это вручную, вызвав parse_args в список аргументов, считанных из файла. Я знаю, как это сделать грязным способом, но это становится беспорядочным, если я хочу реплицировать поведение argparse в Python, где я могу передавать несколько файлов с @, а также аргументы в командной строке, а затем значение параметр - это просто последнее значение, переданное этому параметру. Каков наилучший способ сделать это?

ответ

1

Эта функция в настоящее время отсутствует в ArgParse.jl, хотя это не составит труда добавить. Я подготовил pull request.

В промежутке времени, следующий код достаточно для того, что вам нужно:

# faithful reproduction of Python 3.5.1 argparse.py 
# partial copyright Python Software Foundation 
function read_args_from_files(arg_strings, prefixes) 
    new_arg_strings = AbstractString[] 

    for arg_string in arg_strings 
     if isempty(arg_string) || arg_string[1] ∉ prefixes 
      # for regular arguments, just add them back into the list 
      push!(new_arg_strings, arg_string) 
     else 
      # replace arguments referencing files with the file content 
      open(arg_string[2:end]) do args_file 
       arg_strings = AbstractString[] 
       for arg_line in readlines(args_file) 
        push!(arg_strings, rstrip(arg_line, '\n')) 
       end 
       arg_strings = read_args_from_files(arg_strings, prefixes) 
       append!(new_arg_strings, arg_strings) 
      end 
     end 
    end 

    # return the modified argument list 
    return new_arg_strings 
end 

# preprocess args, then parse as usual 
ARGS = read_args_from_files(ARGS, ['@']) 
args = parse_args(ARGS, s) 
+0

К сожалению, я имел в виду 'Args = ArgParse.parse_args (ARGS, arg_parse_settings)' – becko

+0

@becko Да, это должно работать. –

+0

Можно ли добавить символ комментария в файл с аргументами? Например, все строки, начинающиеся с '#' в файле arg, должны игнорироваться. Вероятно, должна быть возможность установить комментарий char ('#' в примере). – becko