2017-08-11 1 views
0

J'ai un problème fondamental:Comment exécuter le programme externe qui prend son entrée avec l'écho de julia

Je dispose d'un fichier et je dois exécuter une commande pour chaque mot à l'intérieur. Laisse supposer le mot que j'ai maintenant « example_word » la commande que je dois exécuter est la suivante:

readall(run(pipeline(`echo example_word`,`flookup model.foma`)) 

Unfortunatelly je ne peux pas obtenir la sortie de cette commande à partir rempl. Je recherche sur le net et la lecture est recommandée pour cela. Quand je suis arrivé, j'essayer l'erreur suivante:

julia> read(pipeline(`echo example_word`,`flookup model.foma`),String) 
ERROR: MethodError: no method matching read(::Base.OrCmds, ::Type{String}) 
Closest candidates are: 
    read(::AbstractString, ::Any...) at io.jl:109 
    read{T}(::IO, ::Type{T}, ::Int64, ::Int64...) at io.jl:235 
    read{T}(::IO, ::Type{T}, ::Integer, ::Integer...) at io.jl:236 
    ... 

julia> readstring(pipeline(`echo example_word`,`flookup model.foma`),String) 
ERROR: MethodError: no method matching readstring(::Base.OrCmds, ::Type{String}) 
Closest candidates are: 
    readstring(::Base.AbstractCmd) at process.jl:581 
    readstring(::Base.AbstractCmd, ::Union{Base.FileRedirect,IO,RawFD}) at process.jl:581 
+1

'x = lecture (pipeline (\' echo example_word \ ', \' flookup model.foma \ ')), String)' ou 'x = chaîne de lecture (pipeline())' selon la version. Vous pouvez vouloir 'analyser (Int, x)' plus tard –

+0

@DanGetz Aucun d'eux n'a fonctionné. J'ai édité la question en conséquence. – zwlayer

+1

notez que la version 'readstring' n'a pas de paramètre' String' –

Répondre

2
String(read(pipeline(`echo example_word`,`cat`))) 

ou (comme suggéré @DanGetz)

readstring(pipeline(`echo example_word`,`cat`)) 

Il suffit de remplacer cat avec la commande que vous voulez utiliser, je n'avais pas sur mon ordinateur.

Je l'avenir, vous pourriez avoir réalisé que vous n'avez pas besoin de donner readstring le paramètre String en regardant le message d'erreur un peu plus :)

ERROR: MethodError: no method matching readstring(::Base.OrCmds, ::Type{String}) 
Closest candidates are: 
    readstring(::Base.AbstractCmd) at process.jl:581 
+2

+1. A noter que 'readstring (x)' est déprécié en faveur de 'read (x, String)' pour les futurs googleurs :) –