Quand je tape
$ Julia myprog.jl foo bar baz
Où dans mon code puis-je aller pour accéder aux chaînes "foo", "bar", "baz"
?
Je recherche l'équivalent Python de sys.argv
Ah, plus de recherches sur le Web ont conduit à la bonne réponse. Le mot clé ARGS::Array{ASCIIString}
contient des arguments de ligne de commande
Voici un exemple simple
# cli.jl
print(map(x->string(x, x), ARGS)) # Concatenate each arg onto itself and print
Permet de le tester sur la ligne de commande:
$ Julia cli.jl a b c
aa
bb
cc
Un exemple plus simple:
# printargs.jl
println (ARGS [2]);
Exécutez-le en tant que
Julia printargs.jl a b c d
b
Notez que l'index du tableau commence à 1 et PAS 0. Ainsi ARGS [2] imprime b et non c comme dans le cas de nombreux autres langages de programmation.
Julia> Pkg.add("ArgParse")
Documents sur https://argparsejl.readthedocs.io/en/latest/argparse.html
https://docs.Microsoft.com/en-us/windows/win32/api/processenv/nf-processenv-getcommandlinea
Dans le cas où vous avez vraiment besoin des arguments exacts fournis à Julia, y compris le -e
, il existe une solution de contournement pour Windows. Regarder /proc/PID/cmdline
vous pouvez l'extraire linux. Mac n'a pas le même /proc
option, donc demander ps
fonctionne bien.
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
Mais les cas d'utilisation typiques vous n'avez qu'à regarder ARGS
.