入力すると
$ Julia myprog.jl foo bar baz
コードのどこに文字列"foo", "bar", "baz"
にアクセスできますか?
Python sys.argv
に相当するものを探しています
ああ、もっとウェブ検索が正しい答えにつながった。キーワード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
より簡単な例:
#printargs.jl
println(ARGS [2]);
実行する
ジュリアprintargs.jl a b c d
b
配列のインデックスは1から始まり、[〜#〜] not [〜#〜] 0であることに注意してください。したがって、ARGS [2]はbであり、他の多くのプログラミング言語の場合のようにcではありません。
Julia> Pkg.add("ArgParse")
ドキュメント https://argparsejl.readthedocs.io/en/latest/argparse.html
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
のみです。