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