web-dev-qa-db-fra.com

Accéder aux arguments de ligne de commande dans Julia

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

32
MRocklin

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
34
MRocklin

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.

17
Ayush

Julia> Pkg.add("ArgParse") Documents sur https://argparsejl.readthedocs.io/en/latest/argparse.html

0
sajed zarrinpour

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.

0
phyatt