29

Python での一般的な規則は、スクリプトの主な機能を次のように構成することです。そのため、スクリプトとして直接実行することもmain()、インポート時に実行せずにインポートすることもできます。

def main():
    do_stuff()

if __name__ == '__main__':
    main()

require("script.jl"スクリプトが) を使用してインポートされたか、直接実行されたかを認識できるように、ジュリアに設定される同様の変数はありますか?

たとえば、次のように動作する a とともに、 2 つのスクリプトa.jlとがあるとします。b.jlmagic_function()

a.jl :

println("Did we execute a.jl directly? ", magic_function())

b.jl :

require("a.jl")

次のコマンドを実行すると...

> julia a.jl
Did we execute a.jl directly? true
> julia b.jl
Did we execute a.jl directly? false

magic_function()Juliaの現在のディストリビューションには次のような機能はありますか?

4

5 に答える 5

7

これは私が見つけた最良の解決策です:

module mymod
    # stuff here
end

if length(ARGS)>0 && ARGS[1] == "--run"
    using mymod
    mymod.myfunction()
end

次に、通常どおりモジュールをインポートできますが、次のようにコマンドラインから実行可能ファイルのような動作を呼び出すことができます。

julia mycode.jl --run

スクリプトに渡す引数が他にない場合は、if ステートメントを次のように短縮することもできます。

if ARGS == ["--run"]
    # etc...
end
于 2015-11-10T14:29:31.320 に答える
5

私が使う

if ""!=PROGRAM_FILE && realpath(@__FILE__) == realpath(PROGRAM_FILE)

同様の解決策が上で投票されたようです。何が問題なのか知りたいのですが、これをいくつかの単体テストとコマンドラインユーティリティでもあるいくつかのモジュールの両方に使用していchmod 755ます

( ""!=PROGRAM_FILE'REPL include' ケースの

于 2018-06-20T09:50:08.120 に答える
3

あなたはそのisinteractive()機能が欲しいです。REPL で試してみてください。その結果を、この BASH ワンライナーのようにスクリプトから呼び出した結果と比較してくださいjulia -e "println(isinteractive())"

于 2013-01-22T20:34:30.320 に答える