web-dev-qa-db-ja.com

Juliaでコマンドライン引数にアクセスする

入力すると

$ Julia myprog.jl foo bar baz

コードのどこに文字列"foo", "bar", "baz"にアクセスできますか?

Python sys.argvに相当するものを探しています

32
MRocklin

ああ、もっとウェブ検索が正しい答えにつながった。キーワードARGS::Array{ASCIIString}はコマンドライン引数を保持します

ここに簡単な例があります

# cli.jl

print(map(x->string(x, x), ARGS))  # Concatenate each arg onto itself and print

コマンドラインでテストしてみましょう:

$ Julia cli.jl a b c
aa
bb
cc
34
MRocklin

より簡単な例:

#printargs.jl

println(ARGS [2]);

実行する

ジュリアprintargs.jl a b c d

b

配列のインデックスは1から始まり、[〜#〜] not [〜#〜] 0であることに注意してください。したがって、ARGS [2]はbであり、他の多くのプログラミング言語の場合のようにcではありません。

17
Ayush

Julia> Pkg.add("ArgParse")ドキュメント https://argparsejl.readthedocs.io/en/latest/argparse.html

0

https://docs.Microsoft.com/en-us/windows/win32/api/processenv/nf-processenv-getcommandlinea

-eを含むJuliaに渡された正確な引数が本当に必要な場合は、Windowsの回避策があります。 /proc/PID/cmdlineを見ると、Linuxに抽出できます。 Macには同じ/procオプションがないため、psを要求しても問題ありません。

if Sys.iswindows()
    mycmd = unsafe_string(ccall(:GetCommandLineA, Cstring, ()))
elseif Sys.isapple()
    mycmd = strip(read(`/bin/ps -p $(getpid()) -o command=`, String))
elseif Sys.isunix()
    mycmd = replace(read(joinpath("/", "proc", string(getpid()), "cmdline"), String), "\x00"=>" ")
else
    mycmd = string(Base.Julia_cmd()) * join(map(x->" " * x, ARGS))
end

ただし、一般的な使用例はARGSのみです。

0
phyatt