命令行界面
在脚本中使用参数
使用 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 代码并提供选项,类似于 perl
和 ruby
程序提供的选项。
julia [switches] -- [programfile] [args...]
以下是启动 julia 时可用的命令行开关的完整列表(如果适用,'*' 表示默认值;标记为 '($)' 的设置可能会触发包预编译)。
开关 | 描述 |
---|---|
-v , --version | 显示版本信息。 |
-h , --help | 打印命令行选项(此消息)。 |
--help-hidden | -h 未显示的不太常用的选项。 |
--project[={<dir>|@.}] | 将 <dir> 设置为主项目/环境。默认的 @. 选项将向上搜索父目录,直到找到 Project.toml 或 JuliaProject.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.0中,默认的--project=@.
选项不会从Git存储库的根目录向上搜索Project.toml
文件。从Julia 1.1开始,它会执行此操作。