2017-07-10 5 views
0

私はPowershellの引数を​​としてjuliaスクリプトを実行できます。私はinclude("test.jl")でREPLからスクリプトを実行することができますが、iuncludeはスクリプトへのパスという1つの引数しか受け付けません。 (?)includeで遊んでからREPLからの引数でjuliaスクリプトを実行する方法はありますか?

私が明示的にREPLでARGS変数を再定義するので、もしそれが上キャッチして表示し、対応するスクリプトの結果、すべての変数が現在のスコープを参照すると、コードブロックとしてスクリプトを実行しているようです:

>ARGS="c","d" 
>include("test.jl") # prints its arguments in a loop 
c 
d 

しかし、これはARGSを再定義するために警告を与え、それを行うの意図する方法は思えません。引数を明示的に記述している間にREPL(または別のスクリプト)からスクリプトを実行する別の方法はありますか?

+2

[ジュリア: '\に引数を渡すには( "file.jl")を含める\'](https://stackoverflow.com/questions/44967240/juliapassing-argument-to-the- includefile-jl) –

+0

このようなものに意図された方法がない場合は、それがあります。 – ephemeris

答えて

1

この解決策は、クリーンではない、または行儀を整えるスタイルではありません。しかし、あなたが主張する場合:

ARGSをつまむときに警告を避けるには、元のARGSを使用しますが、内容を変更してください。

empty!(ARGS) 
push!(ARGS,"argument1") 
push!(ARGS,"argument2") 

include("file.jl") 

そして、この質問にも重複している、またはに関連::@AlexanderMorleyがに指摘としてjuliapassing-argument-to-the-includefile-jl次のように。

+0

私は「クリア!」は労働者の唯一の有効な指示であり、メインプロセスでそれを試行するとエラーが発生するという印象を受けています。 (この決定の根拠は何であるかはっきりしないが、十分に公正であると思う)。この特定のシナリオでARGSを "クリア"するには、代わりに空になるまでポップアップします。 –

+2

ベクトルのすべての要素を削除する正しい関数は '空です! 'です。 –

+0

ありがとうございました。回答が更新されました。 –

3

おそらく、自己完結型スクリプトをincludeで実行したくないでしょう。 2つのオプションがあります。

  1. スクリプトがあなたのコントロールではなく、コマンドラインから呼び出すことがちょうど別のジュリア・プロセスでそれを呼んで、標準的なインタフェースである場合。 run(`$JULIA_HOME/julia path/to/script.jl arg1 arg2`)。詳細は、running external commandsを参照してください。

  2. スクリプトを管理している場合、それはおそらく二つの部分にそれを分割するより多くの意味を作ると思います。ただジュリアの関数を定義しています(ただし、いずれかの分析を実行していない)ライブラリーのようなファイルとコマンド引数を解析し、ライブラリによって定義された関数を呼び出します。コマンドラインインターフェイスと2番目のスクリプトの両方を書くことができるようになりました。includeライブラリ - またはライブラリのようなファイルを本格化するpackage

の可能性のある重複
関連する問題