命令行界面

在脚本中使用参数

使用 julia 运行脚本时,可以向脚本传递其他参数。

$ julia script.jl arg1 arg2...

这些额外的命令行参数传递到全局常量 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
$ julia script.jl foo bar
script.jl
foo
bar

-- 分隔符可用于将打算用于脚本文件的命令行参数与打算用于 Julia 的参数分开。

$ julia --color=yes -O -- script.jl arg1 arg2..

另请参阅 脚本编写,以获取有关编写 Julia 脚本的更多信息。

并行模式

Julia 可以使用 -p--machine-file 选项以并行模式启动。-p n 将启动 n 个额外的 worker 进程,而 --machine-file file 将为文件 file 中的每一行启动一个 worker。file 中定义的机器必须可以通过无需密码的 ssh 登录访问,并且 Julia 必须安装在与当前主机相同的位置。每个机器定义采用以下形式:[count*][user@]host[:port] [bind_addr[:port]]user 默认为当前用户,port 默认为标准 ssh 端口。count 是在节点上产生的 worker 数量,默认为 1。可选的 bind-to bind_addr[:port] 指定其他 worker 用于连接到此 worker 的 IP 地址和端口。

启动文件

如果有一些代码希望在每次运行 Julia 时都执行,可以将其放入 ~/.julia/config/startup.jl 中。

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

...

请注意,虽然在第一次运行 Julia 后应该有一个 ~/.julia 目录,但如果使用 ~/.julia/config/startup.jl 文件,则可能需要创建 ~/.julia/config 文件夹和 ~/.julia/config/startup.jl 文件。

要使启动代码仅在 Julia REPL 中运行(而不是在 julia 例如在脚本上运行时),请在 startup.jl 中使用 atreplinit

atreplinit() do repl
    # ...
end

Julia 的命令行开关

有各种方法可以运行 Julia 代码并提供选项,类似于 perlruby 程序提供的选项。

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

以下是启动 julia 时可用的命令行开关的完整列表(如果适用,'*' 表示默认值;标记为 '($)' 的设置可能会触发包预编译)。

开关描述
-v, --version显示版本信息。
-h, --help打印命令行选项(此消息)。
--help-hidden-h 未显示的不太常用的选项。
--project[={<dir>|@.}]<dir> 设置为主项目/环境。默认的 @. 选项将向上搜索父目录,直到找到 Project.tomlJuliaProject.toml 文件。
-J, --sysimage <file>使用给定的系统镜像文件启动。
-H, --home <dir>设置 julia 可执行文件的位置。
--startup-file={yes*|no}加载 JULIA_DEPOT_PATH/config/startup.jl;如果 JULIA_DEPOT_PATH 环境变量未设置,则加载 ~/.julia/config/startup.jl
--handle-signals={yes*|no}启用或禁用 Julia 的默认信号处理程序。
--sysimage-native-code={yes*|no}如果可用,则使用系统镜像中的原生代码。
--compiled-modules={yes*|no}启用或禁用模块的增量预编译。
--pkgimages={yes*|no}启用或禁用以 pkgimage 形式的原生代码缓存的使用。
-e, --eval <expr>评估 <expr>
-E, --print <expr>评估 <expr> 并显示结果。
-L, --load <file>立即在所有处理器上加载 <file>
-t, --threads {N|auto}启用 N 个线程;auto 尝试推断一个有用的默认线程数,但确切的行为将来可能会更改。目前,auto 使用基于 OS 特定亲和性分配接口分配给此 julia 进程的 CPU 数量(如果支持)(Linux 和 Windows)。如果此功能不受支持(macOS)或未配置进程亲和性,则使用 CPU 线程数。
--gcthreads=N[,M]为 GC 的标记阶段使用 N 个线程,为 GC 的并发扫描阶段使用 M(0 或 1)个线程。如果未指定,则 N 设置为计算线程数的一半,M 设置为 0。
-p, --procs {N|auto}整数值 N 启动 N 个额外的本地 worker 进程;auto 启动与本地 CPU 线程数(逻辑核心)一样多的 worker。
--machine-file <file><file> 中列出的主机上运行进程。
-i交互模式;REPL 运行且 isinteractive() 为真。
-q, --quiet安静启动:无横幅,抑制 REPL 警告。
--banner={yes|no|auto*}启用或禁用启动横幅。
--color={yes|no|auto*}启用或禁用彩色文本。
--history-file={yes*|no}加载或保存历史记录。
--depwarn={yes|no*|error}启用或禁用语法和方法弃用警告(error 将警告转换为错误)。
--warn-overwrite={yes|no*}启用或禁用方法覆盖警告。
--warn-scope={yes*|no}启用或禁用对不明确的顶层作用域的警告。
-C, --cpu-target <target>将 CPU 特征的使用限制在 <target> 范围内;设置为 help 以查看可用选项。
-O, --optimize={0,1,2*,3}设置优化级别(如果使用 -O 而不带级别,则级别为 3)($)
--min-optlevel={0*,1,2,3}设置每个模块优化的下限。
-g, --debug-info={0,1*,2}设置调试信息生成的级别(如果使用 -g 而不带级别,则级别为 2)($)
--inline={yes|no}控制是否允许内联,包括覆盖 @inline 声明。
--check-bounds={yes|no|auto*}始终发出边界检查、从不发出边界检查,或尊重 @inbounds 声明($)
--math-mode={ieee,fast}不允许或启用不安全的浮点优化(覆盖 @fastmath 声明)。
--code-coverage[={none*|user|all}]计算源代码行的执行次数(省略设置等效于 user)。
--code-coverage=@<path>仅统计给定文件路径/目录下文件的执行次数。需要使用@前缀来选择此选项。不带路径的@将跟踪当前目录。
--code-coverage=tracefile.info将覆盖率信息追加到LCOV跟踪文件(文件名支持格式标记)。
--track-allocation[={none*|user|all}]统计每行源代码分配的字节数(省略设置等效于“user”)。
--track-allocation=@<path>仅统计给定文件路径/目录下文件的字节数。需要使用@前缀来选择此选项。不带路径的@将跟踪当前目录。
--bug-report=KIND启动错误报告会话。它可以用于启动REPL、运行脚本或评估表达式。它首先尝试使用当前环境中安装的BugReporting.jl,如果未安装则回退到最新的兼容BugReporting.jl。有关更多信息,请参阅--bug-report=help
--compile={yes*|no|all|min}启用或禁用JIT编译器,或请求详尽或最小的编译。
--output-o <name>生成目标文件(包括系统镜像数据)。
--output-ji <name>生成系统镜像数据文件(.ji)。
--strip-metadata从系统镜像中删除文档字符串和源位置信息。
--strip-ir删除已编译函数的IR(中间表示)。
--output-unopt-bc <name>生成未优化的LLVM位码(.bc)。
--output-bc <name>生成LLVM位码(.bc)。
--output-asm <name>生成汇编文件(.s)。
--output-incremental={yes|no*}生成增量输出文件(而不是完整文件)。
--trace-compile={stderr,name}打印执行期间编译的方法的预编译语句或保存到路径。
--image-codegen强制在镜像模式下生成代码。
--heap-size-hint=<size>如果内存使用量高于该值,则强制执行垃圾回收。内存提示可以以兆字节(例如,500M)或千兆字节(例如,1G)为单位指定。
Julia 1.1

在Julia 1.0中,默认的--project=@.选项不会从Git存储库的根目录向上搜索Project.toml文件。从Julia 1.1开始,它会执行此操作。