Engee 文档

命令行界面

在脚本中使用参数

当您使用`julia`运行脚本时,您可以将其他参数传递给它。:

$朱莉娅脚本。jl arg1arg2...

这些额外的命令行参数在全局常量`ARGS’中传递。 脚本本身的名称在全局常量`PROGRAM_FILE’中传递。 请注意:在使用`-e`参数计算通过命令行传递的Julia表达式时也设置了’ARGS’常量(请参阅下面的`julia`帮助的输出),但`PROGRAM_FILE`常量将为空。 例如,您可以像这样只输出传递给脚本的参数。

$ julia -e 'println(PROGRAM_FILE); for x in ARGS; println(x); end' foo bar

foo
bar

此代码也可以放在脚本中并运行:

$echo'println(PROGRAM_FILE);for X in ARGS;println(x);end'>script.jl
$朱莉娅脚本。jl foo酒吧
剧本。jl
[医]脚
酒吧

使用'--'分隔符,您可以将脚本文件的命令行参数与Julia的参数分开。:

$julia--color=yes-O--script。jl arg1arg2..

有关编写Julia脚本的更多信息,请参阅 脚本

入口点是’Main。主`

从Julia(1.11)开始,Base`导出宏@main'。 此宏扩展为字符"main",但在脚本或表达式执行完成后,"julia"将尝试执行函数"Main"。main`ARGS)`如果已经定义了这样的函数并且使用宏'@main’选择了此行为。

此功能旨在帮助统一已编译和交互式工作流。 在编译的工作流中,定义’main’函数的代码的加载可以在空间上暂时与其调用分开。 但是,对于交互式工作流,此行为类似于在定义的脚本或表达式的末尾显式调用`exit(main(ARGS))`。

兼容性:Julia1.11

的特殊入口点’主.在Julia1.11中添加了main`。 为了与以前版本的Julia兼容,添加一个显式宏'@isdefined(var"@main")? (@main):在脚本末尾退出(main(ARGS))`。

要查看此功能的作用,请考虑以下定义,该定义执行打印函数,尽管没有显式调用"main`:

$julia-e'(@main)(args)=println("Hello World!")'
你好世界!

这仅适用于`Main`模块中`main`的绑定,并且仅当在定义模块中使用宏`@main`时。

例如,如果您使用`hello`而不是’main`,则不会执行`hello’函数。:

$julia-e'hello(ARGS)=println("Hello World!")'

以及`main`的简单定义:

$julia-e'main(ARGS)=println("Hello World!")'

但是,没有必要在定义期间接受。:

$julia-e'main(ARGS)=println("Hello World!");@主'
你好世界!

'主’绑定可以从包中导入。 _hello world_包,定义如下:

module Hello

export main
(@main)(args) = println("Hello from the package!")

end

可以如下图使用:

 $julia-e'使用Hello'
 包裹里的你好!
$julia-e'import Hello'#Note. 执行取决于绑定,而不是包是否加载。

但是,请注意,目前建议不要将应用程序代码和可重用库混合在同一个包中。 辅助帮助程序应用程序可以作为单独的软件包分发,也可以作为脚本分发,在软件包的"bin"文件夹中具有单独的入口点"main"。

并行模式

Julia可以使用'-p`或`--machine-file`选项以并行模式运行。 -Pn’参数启动一个额外的’n’工作流,--machine-file文件`为`file’文件中的每一行启动一个工作流。 在’file’参数中指定的计算机必须可以通过ssh访问而无需密码,并且Julia环境必须安装在当前主机的位置。 每台计算机都以以下形式指定:`[count*][user@]host[:port][bind_addr[:port]]'。 默认情况下,'user’是当前用户,`port’是标准SSH端口。 'count’是节点上产生的工作进程数(默认为1)。 可选的`bind-to bind_addr[:port]'元素定义了其他工作进程应用于连接到此进程的IP地址和端口。

启动文件

每次启动Julia时应该执行的代码可以放在文件'~/中。朱莉娅/配置/启动。jl`:

$ echo 'println("Greetings! 你好! 안녕하세요?")' > ~/.julia/config/startup.jl
$ julia
Greetings! 你好! 안녕하세요?

...

请注意:目录'/。julia’必须在Julia首次启动后存在,但是,文件夹'/。julia/config’和文件'~/。朱莉娅/配置/启动。jl’可能需要手动创建。

这样启动代码只在执行 REPL Julia(并且,例如,在脚本中运行`julia’时不是),使用 atreplinit在’启动。jl`:

atreplinit() do repl
    # ...
end

Julia的命令行选项

就像perl和ruby中的程序一样,有不同的方法来运行带有参数的Julia代码。:

julia [switches] -- [programfile] [args...]

以下是Julia启动时可用的命令行选项的完整列表("*"符号标记默认值,如果有的话;标记为"($)"的选项可以启动包的预编译)。

参数 资料描述

-v','--版本

显示有关版本的信息。

-h,`--救命'

输出命令行参数(此表的内容)。

"--隐藏帮助`

显示使用'-h`参数时不显示的罕见参数。

'--项目[={<dir>|@.}]`

将目录`<dir>'设置为活动项目或环境。 使用默认值'@时。"文件"项目。toml’或’JuliaProject.toml’正在父目录中搜索。

-J,'-sysimage<文件>`

使用指定的系统映像文件启动

-H,'--home<dir>`

设置’julia’可执行文件的位置。

'--启动文件={yes*|no}`

下载文件’JULIA_DEPOT_PATH/config/startup。jl'。 如果环境变量为 'JULIA_DEPOT_PATH'未设置,下载文件`~/。朱莉娅/配置/启动。jl'。

'--handle-signals={yes*|no}`

默认情况下启用或禁用Julia信号处理程序。

'--sysimage-native-code={yes*|no}`

使用系统映像中的机器代码(如果可用)。

'--编译模块={yes*|no|existing|strict}`

启用或禁用模块的增量预编译。 'Existing’参数允许使用先前预编译的现有编译模块,但禁止创建新的预编译文件。 'Strict’参数类似,但如果没有预编译文件,则会发生错误。

'--pkgimages={yes*|no|existing}`

在pkgimages窗体中启用或禁用机器代码缓存的使用。 'Existing’参数允许您使用现有的pkgimages,但禁止创建新的pkgimages。

-e,'--eval<expr>`

计算表达式'<expr>`。

-E,'--打印<expr>`

计算表达式'<expr>'并输出结果。

-m,'--模块<包>[args]`

使用"args"执行入口点"Package"(函数"@main")。

-L,'--加载<文件>`

立即在所有处理器上加载文件`<file>`。

-t,'--线程 {auto|N[,auto|M]}`

激活N[+M]个线程。 N个线程被分配给’默认’线程池,并且如果指定了M,则M个线程被分配给`交互`线程池。 使用值’auto`,尝试输出适当数量的默认流,但行为特征可能会在将来更改。 目前,如果支持,N设置为等于通过特定于操作系统的绑定接口(Linux或Windows)分配给给定Julia进程的Cpu数;如果不支持此接口(macOS)或未配置进程绑定,则设置为等于CPU线程数。 M设置为1。

'--gcthreads=N[,M]`

在垃圾回收期间将N个线程用于标记阶段,将M个线程(0或1)用于并行清理阶段。 N设置为计算线程数的一半,M设置为0,除非另有说明。

-p,'--procs {N|auto}`

启动N个额外的本地工作流(N是整数)。 使用"auto"值时,正在运行的工作进程数等于本地CPU线程(逻辑内核)的数量。

'--机器文件<文件>`

在`<file>'中列出的节点上运行进程。

-i,'--互动'

交互模式;REPL正在运行’isinteractive()'设置为true。

-q,`--安静'

运行没有消息:横幅不显示,REPL警告被隐藏。

'--旗帜={yes|no|short|auto*}`

启用或禁用加载横幅。

'--颜色={yes|no|auto*}`

启用或禁用彩色文本。

'--历史档案={yes*|no}`

下载或保存历史记录。

'--德瓦恩={yes|no*|error}`

启用或禁用有关语法和方法停用的警告(使用`error`值时会显示错误而不是警告)。

'--警告-复盖={yes|no*}`

启用或禁用有关复盖方法的警告。

'--警告范围={yes*|no}`

启用或禁用有关不明确的顶级区域的警告。

-C,'--cpu-目标<目标>`

限制在`<target>`级别使用CPU功能。 要查看可用选项,请将值设置为"帮助"。

-O,'--优化={0|1|2*|3}`

指定优化级别(如果使用`-O`参数而不指定级别,则为级别3)($)。

'--min-optlevel={0*|1|2|3}`

在模块级别设置优化的下限。

-g,'--调试-信息={0|1*|2}`

指定要创建的调试信息级别(如果使用`-g`参数而不指定级别,则为级别2)($)。

'--内联={yes|no}`

确定是否允许嵌入,包括重新定义'@inline’声明。

'--检查边界={yes|no|auto*}`

确定是否始终执行边界检查、从不执行边界检查或考虑`@inbounds`($)声明。

'--数学模式={ieee,fast}`

启用或禁用浮点值的不安全优化(复盖'@fastmath’声明)。

'--波莉={yes*|no}`

启用或禁用多面体Polly优化器(复盖@polly声明)。

'--代码复盖率[={none*|user|all}]`

计算源代码行的执行次数(如果未指定值,则使用值`user`)。

'--代码复盖率=@<路径>`

计算执行次数,但仅限于位于指定路径或指定目录中的文件。 选择此参数需要前缀"@"。 如果'@'字符后面没有路径,则跟踪当前目录。

--code-coverage=tracefile.info

将代码复盖率信息添加到LCOV跟踪文件(文件名支持格式令牌)。

'--轨道分配[={none*|user|all}]`

计算源代码每行分配的字节数(如果未指定值,则使用用户值)。

'--跟踪分配=@<路径>`

计数字节,但仅在位于指定路径或指定目录中的文件中。 选择此参数需要前缀"@"。 如果'@'字符后面没有路径,则跟踪当前目录。

'--bug-report=KIND`

启动错误报告会话。 它可用于运行REPL、执行脚本或计算表达式。 首先,它尝试使用BugReporting文件。当前环境中安装的jl。 如果尝试失败,最新的兼容BugReporting。应用jl文件。 有关详细信息,请参阅`--bug-report=help`参数的说明。

'--堆大小-提示=<大小>`

如果内存使用率超过设置值,它会强制启动垃圾回收。 该值可以指定为字节数(包括KB、MB、GB或TB),也可以指定为物理内存量的百分比(%)。

'--编译={yes*|no|all|min}`

启用或禁用JIT编译器,或请求详尽或最小编译。

'--输出-o<名称>`

创建目标文件(包括系统映像数据)。

'--输出-ji<名称>`

创建系统映像数据文件(。纪)。

'--条带元数据`

从系统映像中删除docstring字符串和源代码位置信息。

'--脱衣ir`

删除已编译函数的中间表示(IR)。

'--输出-unopt-bc<名称>`

创建未优化的LLVM位码(。bc)。

'--输出-bc<名称>`

创建LLVM位码(。bc)。

'--输出-asm<名称>`

创建程序集文件(.s)。

'--输出-增量={yes|no*}`

创建一个额外的(不完整的)输出数据文件。

'--跟踪编译={stderr|name}`

显示在运行时编译的方法的预编译语句,或将其保存到指定的路径。

'--图像编码`

在图像创建模式下强制生成代码。

'--permalloc-pkgimg={yes|no*}`

将包映像数据部分复制到内存中。

兼容性:Julia1.1

在Julia1.0中,当使用'--project=@'参数时。'默认情况下,'项目。没有从Git存储库的根目录搜索toml`文件。 从版本Julia1.1开始,执行这样的搜索。