Интерфейс командной строки
Использование аргументов внутри скриптов
При запуске скрипта с помощью julia
в него можно передать дополнительные аргументы:
$ julia script.jl arg1 arg2...
Эти дополнительные аргументы командной строки передаются в глобальной константе ARGS
. Имя самого скрипта передается в глобальной константе PROGRAM_FILE
. Обратите внимание: константа ARGS
также задается при вычислении выражения Julia, переданного через командную строку с помощью параметра -e
(см. выходные данные справки 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 см. в разделе Скрипты.
Точка входа Main.main
Начиная с версии Julia (1.11) Base
экспортирует макрос @main
. Этот макрос расширяется до символа main
, но по завершении выполнения сценария или выражения julia
попытается выполнить функцию Main.main(ARGS)
, если такая функция была определена, и это поведение было выбрано с помощью макроса @main
.
Эта возможность призвана помочь в унификации скомпилированных и интерактивных рабочих процессов. В скомпилированных рабочих процессах загрузка кода, определяющего функцию main
, может быть пространственно и временно отделена от ее вызова. Однако для интерактивных рабочих процессов такое поведение аналогично явному вызову exit(main(ARGS))
в конце определяемого скрипта или выражения.
Совместимость: Julia 1.11
Специальная точка входа |
Чтобы увидеть эту возможность в действии, рассмотрим следующее определение, которое выполнит функцию print, несмотря на отсутствие явного вызова main
:
$ julia -e '(@main)(args) = println("Hello World!")' 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!"); @main' Hello World!
Привязку main
можно импортировать из пакета. Пакет hello world, определенный следующим образом:
module Hello export main (@main)(args) = println("Hello from the package!") end
можно использовать, как показано далее:
$ julia -e 'using Hello' Hello from the package! $ julia -e 'import Hello' # Примечание. Выполнение зависит от привязки, а не от того, загружен ли пакет.
Однако обратите внимание, что в настоящее время рекомендуется не смешивать код приложения и многократно используемой библиотеки в одном пакете. Вспомогательные приложения-помощники могут распространяться как отдельные пакеты или как скрипты с отдельными точками входа main
в папке bin
пакета.
Параллельный режим
Julia можно запустить в параллельном режиме с помощью параметра -p
или --machine-file
. Параметр -p n
запускает дополнительно n
рабочих процессов, а --machine-file file
— рабочий процесс для каждой строки в файле file
. Компьютеры, указанные в аргументе file
, должны быть доступны по протоколу ssh
без пароля, причем среда Julia должна быть установлена в расположении текущего хоста. Каждый компьютер указывается в следующей форме: [count*][user@]host[:port] [bind_addr[:port]]
. По умолчанию user
— это текущий пользователь, а port
— стандартный SSH-порт. count
— это количество рабочих процессов, порождаемых на узле (по умолчанию 1). Необязательный элемент bind-to bind_addr[:port]
определяет IP-адрес и порт, которые другие рабочие процессы должны использовать для подключения к данному процессу.
Файл запуска
Код, который должен выполняться при каждом запуске Julia, можно поместить в файл ~/.julia/config/startup.jl
:
$ echo 'println("Greetings! 你好! 안녕하세요?")' > ~/.julia/config/startup.jl
$ julia
Greetings! 你好! 안녕하세요?
...
Обратите внимание: каталог ~/.julia
должен существовать после первого запуска Julia, однако папку ~/.julia/config
и файл ~/.julia/config/startup.jl
может потребоваться создать вручную.
Чтобы код запуска выполнялся только в REPL Julia (а, например, не при запуске julia
в скрипте), используйте atreplinit
в startup.jl
:
atreplinit() do repl
# ...
end
Параметры командной строки для Julia
Так же как программы на perl
и ruby
, запускать код Julia с указанием параметров можно разными способами:
julia [switches] -- [programfile] [args...]
Ниже приведен полный список параметров командной строки, доступных при запуске Julia (символом «*» помечено значение по умолчанию, если оно есть; параметры с пометкой «($)» могут инициировать предварительную компиляцию пакета).
Параметр | Описание |
---|---|
|
Выводит сведения о версии. |
|
Выводит параметры командной строки (содержимое данной таблицы). |
|
Выводит редкие параметры, не отображаемые при использовании параметра |
|
Устанавливает каталог |
|
Запуск с использованием указанного файла образа системы |
|
Задает расположение исполняемого файла |
|
Загружает файл |
|
Включает или отключает обработчики сигналов Julia по умолчанию. |
|
Использует машинный код из образа системы, если он доступен. |
|
Включает или отключает инкрементную предварительную компиляцию модулей. Параметр |
|
Включает или отключает использование кэширования машинного кода в форме pkgimages. Параметр |
|
Вычисляет выражение |
|
Вычисляет выражение |
|
Выполняет точку входа |
|
Немедленно загружает файл |
|
Активирует N[+M] потоков. N потоков назначаются пулу потоков |
|
Используйте N потоков для этапа пометки в ходе сборки мусора и M потоков (0 или 1) для этапа параллельной очистки. N устанавливается равным половине количества вычислительных потоков, а M — равным 0, если не указано иное. |
|
Запускает N дополнительных локальных рабочих процессов (N — целое число). При использовании значения |
|
Запускает процессы на узлах, перечисленных в |
|
Интерактивный режим; REPL выполняется, |
|
Запуск без сообщений: баннер не выводится, предупреждения REPL скрываются. |
|
Включает или отключает загрузочный баннер. |
|
Включает или отключает цветной текст. |
|
Загружает или сохраняет историю. |
|
Включает или отключает предупреждения о синтаксисе и выводе методов из использования (при использовании значения |
|
Включает или отключает предупреждения о перезаписи методов. |
|
Включает или отключает предупреждение о неоднозначной области верхнего уровня. |
|
Ограничивает использование функций ЦП на уровне |
|
Задает уровень оптимизации (уровень 3, если параметр |
|
Задает нижнюю границу для оптимизации на уровне модулей. |
|
Задает уровень создаваемой отладочной информации (уровень 2, если параметр |
|
Определяет, разрешено ли встраивание, включая переопределение объявлений |
|
Определяет, выполняются ли проверки границ всегда, никогда или с учетом объявлений |
|
Включает или отключает небезопасные оптимизации значений с плавающей запятой (переопределяет объявление |
|
Включает или отключает полиэдрический оптимизатор Polly (переопределяет объявление @polly). |
|
Подсчитывает количество выполнений строк исходного кода (если значение не указано, используется значение |
|
Подсчитывает выполнения, но только в файлах, находящих по указанному пути или в указанном каталоге. Для выбора этого параметра требуется префикс |
|
Добавляет информацию о покрытии кода в файл трассировки LCOV (имя файла поддерживает токены формата). |
|
Подсчитывает количество байтов, выделяемых каждой строкой исходного кода (если значение не указано, используется значение user). |
|
Подсчитывает байты, но только в файлах, находящих по указанному пути или в указанном каталоге. Для выбора этого параметра требуется префикс |
|
Запускает сеанс отчета об ошибках. Может использоваться для запуска REPL, выполнения скрипта или вычисления выражений. Сначала пытается использовать файл BugReporting.jl, установленный в текущей среде. Если попытка не удается, применяется последний совместимый файл BugReporting.jl. Дополнительные сведения см. в описании параметра |
|
Принудительно запускает сборку мусора, если использование памяти превышает заданное значение. Значение может быть указано в виде количества байтов (в том числе в КБ, МБ, ГБ или ТБ) или в виде процента (%) от объема физической памяти. |
|
Включает или отключает JIT-компилятор либо запрашивает исчерпывающую или минимальную компиляцию. |
|
Создает объектный файл (включая данные образа системы). |
|
Создает файл данных образа системы (.ji). |
|
Удаляет строки docstring и информацию о расположении исходного кода из образа системы. |
|
Удаляет промежуточное представление (IR) скомпилированных функций. |
|
Создает неоптимизированный битовый код LLVM (.bc). |
|
Создает битовый код LLVM (.bc). |
|
Создает файл сборки (.s). |
|
Создает добавочный (неполный) файл выходных данных. |
|
Выводит на экран операторы предварительной компиляции для методов, компилируемых во время выполнения, или сохраняет их по указанному пути. |
|
Принудительно генерирует код в режиме создания образа. |
|
Копирует раздел данных образов пакетов в память. |
Совместимость: Julia 1.1
В Julia 1.0 при использовании параметра |