有没有办法使用 REPL 的参数运行 julia 脚本?



我可以运行带有Powershell参数的julia脚本作为> julia test.jl 'a' 'b'。我可以使用 REPL 运行脚本include("test.jl")include只接受一个参数 - 脚本的路径。

从玩弄include来看,它似乎将脚本作为代码块运行,所有变量都引用当前(?(范围,因此如果我在 REPL 中显式重新定义ARGS变量,它会捕获并显示相应的脚本结果:

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

然而,这为重新定义ARGS发出了警告,并且似乎不是这样做的预期方式。有没有另一种方法可以从 REPL(或另一个脚本(运行脚本,同时明确说明其参数?

您可能不想通过include来运行自包含脚本。 有两种选择:

  1. 如果脚本不在您的控制范围内,并且从命令行调用它是规范界面,只需在单独的 Julia 进程中调用它即可。run(`$JULIA_HOME/julia path/to/script.jl arg1 arg2`). 有关更多详细信息,请参阅运行外部命令。

  2. 如果您可以控制脚本,那么将其拆分为两部分可能更有意义:一个只定义 Julia 函数(但不运行任何分析(的类似库的文件和一个解析参数并调用库定义的函数的命令行文件。 命令行界面和您现在编写的第二个脚本都可以include库 - 或者更好的是使类似库的文件成为一个成熟的包。

这个解决方案不是干净的,也不是朱莉娅式的做事。但如果你坚持:

为避免在弄乱ARGS时出现警告,请使用原始ARGS但更改其内容。如下所示:

empty!(ARGS)
push!(ARGS,"argument1")
push!(ARGS,"argument2")
include("file.jl")

这个问题也是重复的,或者与@AlexanderMorley指出的:juliapassing-argument-to-the-includefile-jl有关。

不确定它是否有帮助,但我花了一段时间才弄清楚这一点:

在你的路径"C:\Users\\.julia\config\"上可能有一个名为startup.jl的.jl文件。

诀窍是,并非总是朱莉娅设置会创建这个。因此,如果目录和 .jl 文件都不存在,请创建它们。

Julia 会将此 .jl 文件视为每次运行 REPL 时要执行的命令列表。为了设置项目的目录(即使用cd("(的C:\MyJuliaProject\MyJuliaScript.jl(和经常使用的库(如使用Pkg,使用线性代数等(非常方便。

我想分享这个,因为我没有发现有人明确表示您的 Julia 设备的安装中可能不存在此目录。我花了比它应该多的时间才能弄清楚这件事。

最新更新