Julia:从 REPL 或命令行中找出是否 运行

Julia: find out if run from REPL or command line

有没有办法确定 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

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

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

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

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

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

$ more test.jl

println("interactive : $(isinteractive())")


$ julia test.jl
interactive : false

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

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