Julia:从命令行将任意长度的数组传递给脚本

Julia: pass Array of arbitrary length to script from command line

ARGS 关键字允许在从命令行调用 Julia 脚本时指定参数(请参阅 Access command line arguments in Julia)。这样,命令行调用中的每个 space 都在 ARGS 数组中标记一个单独的元素。如果我希望这些元素之一本身是任意长度的数组怎么办?只是连接 ARGS 的单独元素在这里似乎不合适。

这里有两个键。

  1. 请注意,您从命令行传递给脚本的任何内容最初都是一个字符串。在脚本中使用 eval(parse( )) 将您传递的字符串转换为您想要的对象类型。
  2. 确保正确制定初始字符串。这可能取决于您希望传递的数组的内容。

这是一个示例脚本:

println(string("First Arg Passed to Script: ", ARGS[1]))
println(string("typeof(ARGS[1]) = ", typeof(ARGS[2])))    

println(string("Second Arg Passed to Script: ", ARGS[2]))
println(string("typeof(ARGS[2]) = ", typeof(ARGS[2])))    

MyArray = eval(parse(ARGS[1]))    

println(string("typeof(MyArray) = ", typeof(MyArray)))
println(string("length(MyArray) = ", length(MyArray)))
println(string("MyArray = ", MyArray))

运行 使用以下终端命令:

julia /Users/aireties/Desktop/ArrayTest.jl "[2, 4, 5]" 23

产生输出:

First Arg Passed to Script: [2, 4, 5]
typeof(ARGS[1]) = UTF8String
Second Arg Passed to Script: 23
typeof(ARGS[2]) = UTF8String
typeof(MyArray) = Array{Int64,1}
length(MyArray) = 3
MyArray = [2,4,5]

注意:但是,如果我希望在从命令行传递的数组中包含字符串,我需要使用第二组单引号,将带有 Julia 用来指示字符串的双引号的数组:

julia /Users/aireties/Desktop/ArrayTest.jl '["a", "b", 5]'  23

电话:

julia /Users/aireties/Desktop/ArrayTest.jl "["a", "b", 5]"  23

会产生错误。

@aireties的回答很好。但是,我想我会提供另一个选项,如果输入数组很大,它会特别有效。只需将输入数组存储在已知位置的文本文件中,例如/someAbsolutePath/myArray.csv 然后在调用 julia 时将文本文件的位置作为参数传递。然后,在脚本的前几行中,调用 readcsv 瞧。

当您想从命令行调用需要大量输入的例程时,这实际上是许多语言(例如 Python/R/Matlab)的一种相当常见的策略。我在生产环境中看到过编译的 Matlab 例程,这些例程将自定义文本文件的位置作为命令行中的单个输入参数。然后,Matlab 例程的第一部分将从自定义文本文件中读取大量输入参数(如果文本文件与预期不符,则会抛出错误)。在某些情况下,文本文件将包含许多包含其他相关输入的其他文本文件的位置!