2016-04-18 12 views
1

Pythonのargparseは、ファイルからパラメータを読み込むための簡単な方法を持っているArgParse.jlのパラメータファイル?代わりに、一つ一つ自分の引数を渡すの</p> <p><a href="https://docs.python.org/2/library/argparse.html#fromfile-prefix-chars" rel="nofollow">https://docs.python.org/2/library/argparse.html#fromfile-prefix-chars</a></p> <p>:

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

あなたが言うことができます:

python script.py @args.txt 

となり、引数はargs.txtから読み込まれます。

ArgParse.jlでこれを行う方法はありますか?

P .:これを行う「デフォルト」の方法がない場合は、ファイルから読み込まれた引数のリストでparse_argsを呼び出して、手で行うことができます。私はこれをもっと汚い方法で行う方法を知っていますが、Pythonでargparseの動作を複製したい場合は、@で複数のファイルを渡すことができます。また、コマンドラインの引数とパラメータは、の最後のの値だけがこのパラメータに渡されます。これを行う最善の方法は何ですか?

答えて

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

引数にcharをファイルに追加できますか?たとえば、argファイルで '# 'で始まる行はすべて無視する必要があります。おそらく、コメントchar(この例では '#')を設定するオプションがあるはずです。 – becko

関連する問題