2017-08-02 1 views
0

je voudrais faire quelque chose comme:Comment composer une commande externe en julia en utilisant la concaténation de différentes variables?

arg= " -l " 
cmd = "ls $arg " 
run(cmd) 

mais je ne peux trouver aucune solution simple à faire:

$ julia 
       _ 
    _  _ _(_)_  | A fresh approach to technical computing 
    (_)  | (_) (_) | Documentation: https://docs.julialang.org 
    _ _ _| |_ __ _ | Type "?help" for help. 
    | | | | | | |/ _` | | 
    | | |_| | | | (_| | | Version 0.6.0 (2017-06-19 13:05 UTC) 
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release 
|__/     | x86_64-pc-linux-gnu 

julia> arg=" -l " 
" -l " 

julia> cmd=`ls $arg` 
`ls ' -l '` 

julia> run(cmd) 
ls: cannot access -l : No such file or directory 
ERROR: failed process: Process(`ls ' -l '`, ProcessExited(2)) [2] 
Stacktrace: 
[1] pipeline_error(::Base.Process) at ./process.jl:682 
[2] run(::Cmd) at ./process.jl:651 

julia> cmd="ls $arg" 
"ls -l " 

julia> run(`$cmd`) 
ERROR: could not spawn `'ls -l '`: no such file or directory (ENOENT) 
Stacktrace: 
[1] _jl_spawn(::String, ::Array{String,1}, ::Ptr{Void}, ::Base.Process, ::RawFD, ::RawFD, ::RawFD) at ./process.jl:360 
[2] #373 at ./process.jl:512 [inlined] 
[3] setup_stdio(::Base.##373#374{Cmd}, ::Tuple{RawFD,RawFD,RawFD}) at ./process.jl:499 
[4] #spawn#372(::Nullable{Base.ProcessChain}, ::Function, ::Cmd, ::Tuple{RawFD,RawFD,RawFD}) at ./process.jl:511 
[5] run(::Cmd) at ./process.jl:650 

doit diviser i la chaîne résultante pour séparer chaque partie (cause il y a par ailleurs, comment faire pour obtenir le statut de sortie de la commande?)

merci beaucoup

+1

Essayez 'arg =" -l "' à la place de 'arg =" -l "'. Les espaces confus 'ls'. Regardez également [Exécution de programmes externes] (https://docs.julialang.org/en/latest/manual/running-external-programs/) dans le manuel. –

+0

Je pense que c'est le même problème. vous voulez dire comme ça: julia> arg = "- l" "-l" julia> cmd = "ls $ arg" "ls -l" julia> run ('cmd' de $) ERREUR: pourrait pas spawn ''ls -l'': pas un tel fichier ou répertoire (ENOENT), –

+0

Utilisez' cmd = \ 'ls $ arg \' '(avec des retours) –

Répondre

1

Essayez:

arg = "-l" 
cmd = `ls $arg` 
run(cmd) 

Et lire running external programs à comprendre plus.

+0

ok! désolé pour mes erreurs ... et cela fonctionne avec plus de variables aussi :) 'arga =" -l "; argb = "-a"; cmd = \ 'ls $ arga $ argb \'; run (cmd) ' –

+0

J'ai cherché sur le Julia doc à propos de l'exécution de programmes externes, mais n'a pas trouvé sur le statut de sortie ... une idée? –

+1

Dans le doc lié, il y a un paragraphe avec * La méthode run elle-même ne renvoie rien et déclenche une exception ErrorException si la commande externe ne s'exécute pas correctement *. Devrait s'appliquer (bien que je ne l'ai pas essayé maintenant) –