【问题标题】:Julia: find out if run from REPL or command lineJulia:判断是从 REPL 还是命令行运行
【发布时间】:2020-03-31 22:59:38
【问题描述】:

有没有办法确定 julia 脚本 myprog.jl 是通过julia myprog.jl 从命令行调用还是通过include("myprog.jl") 从 REPL 调用?

背景:我正在使用 ArgParse.jl 包,由于我无法从 REPL 传递命令行参数,我只想在调用 include("myprog.jl") 之前设置一个变量 ARGS = "argA --optB 1 --flagC" 以达到与julia myprog.jl argA --optB 1 --flagC 从命令行。为此,我需要知道程序是从命令行调用还是从 REPL 调用的,这样我就可以编写类似

if called_from_repl
    parse_args(split(ARGS),s)
else
    parse_args(s)
end

【问题讨论】:

    标签: julia read-eval-print-loop


    【解决方案1】:

    只需使用isinteractive 即可确定 Julia 是否正在运行交互式会话。

    考虑下面的例子(我使用$作为命令行提示符,julia>作为Julia REPL提示符)

    $ more test.jl
    
    println("interactive : $(isinteractive())")
    
    
    $ julia test.jl
    interactive : false
    

    现在让我们在 REPL 中运行相同的脚本:

    julia> include("test.jl")
    interactive : true
    

    【讨论】:

      【解决方案2】:

      是的,这是可能的。 Base 定义了常量Base.PROGRAM_FILE,其中包含在命令行中传递的脚本名称。宏 Base.@__FILE__ 计算为调用该宏的脚本路径。

      表达式abspath(PROGRAM_FILE) == @__FILE__ 在命令行传递的脚本中计算为真,但对于包含的脚本则为假。

      Julia Lang 文档中讨论了此技术:https://docs.julialang.org/en/latest/manual/faq/#man-scripting-1

      【讨论】:

        猜你喜欢
        • 2010-11-09
        • 2021-10-23
        • 2021-04-16
        • 2020-06-18
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 2018-06-14
        • 2013-01-11
        相关资源
        最近更新 更多