Spec-Zone.ru › Julia 1.11

Командная строка

Использование аргументов внутри скриптов

При запуске скрипта с помощью 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)) в конце оцениваемого скрипта или выражения.

Специальная точка входа Main.main была добавлена в Julia 1.11. Для совместимости с предыдущими версиями Julia добавьте явный @isdefined(var"@main") ? (@main) : exit(main(ARGS)) в конце ваших скриптов.

Чтобы увидеть эту функцию в действии, рассмотрите следующее определение, которое выполнит функцию печати, несмотря на отсутствие явного вызова 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' # N.B.: Execution depends on the binding not whether the package is loaded
$

Однако обратите внимание, что в настоящее время рекомендуется не смешивать код приложения и повторно используемого библиотечного кода в одном пакете. Помощнические приложения могут распространяться как отдельные пакеты или как скрипты с отдельными 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 если вы используете её.

Чтобы код запуска выполнялся только в The Julia REPL (а не при запуске julia , например, на скрипте), используйте atreplinit в startup.jl:

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|existing|strict} Включить или отключить инкрементальную предварительную компиляцию модулей. Параметр existing позволяет использовать существующие скомпилированные модули, которые были предварительно скомпилированы ранее, но запрещает создание новых файлов предварительной компиляции. Параметр strict аналогичен, но выдаст ошибку, если файл предварительной компиляции не найден.
--pkgimages={yes*|no|existing} Включить или отключить использование кеширования кода нативного кода в виде pkgimages. Параметр existing позволяет использовать существующие pkgimages, но запрещает создание новых
-e, --eval <expr> Вычислить <expr>
-E, --print <expr> Вычислить <expr> и отобразить результат
-m, --module <Package> [args] Выполнить точку входа Package (функция @main) с аргументами `args`
-L, --load <file> Загрузить <file> немедленно на все процессоры
-t, --threads {auto|N[,auto|M]} Включить N[+M] потоков; N потоков назначены пулу потоков default, а если указано M, M потоков назначены пулу потоков interactive; auto пытается определить полезное значение по умолчанию для количества используемых потоков, но точное поведение может измениться в будущем. В настоящее время устанавливает N равным количеству ЦП, назначенных этому процессу Julia, на основе интерфейса назначения сродства ОС, если он поддерживается (Linux и Windows), или количеству потоков ЦП, если он не поддерживается (MacOS), или если сродство процесса не настроено, и устанавливает M равным 1.
--gcthreads=N[,M] Использовать N потоков для фазы маркировки сборки мусора и M (0 или 1) потоков для конкурирующей фазы очистки сборки мусора. N устанавливается в половину от числа вычислительных потоков, а M устанавливается в 0, если не указано.
-p, --procs {N|auto} Целое значение N запускает N дополнительных локальных рабочих процессов; auto запускает столько рабочих процессов, сколько локальных потоков ЦП (логических ядер)
--machine-file <file> Запустить процессы на хостах, перечисленных в <file>
-i, --interactive Интерактивный режим; REPL запускается, и isinteractive() истинно
-q, --quiet Тихий запуск: без баннера, подавление предупреждений REPL
--banner={yes|no|short|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> Ограничить использование функций ЦП до <target>; установите help, чтобы увидеть доступные варианты
-O, --optimize={0|1|2*|3} Установить уровень оптимизации (уровень равен 3, если -O используется без уровня) ($)
--min-optlevel={0*|1|2|3} Установить нижнюю границу оптимизации на модуль
-g, --debug-info={0|1*|2} Установить уровень генерации отладочной информации (уровень равен 2, если -g используется без уровня) ($)
--inline={yes|no} Управление разрешением встраивания, включая переопределение объявлений @inline
--check-bounds={yes|no|auto*} Выводить проверки границ всегда, никогда или учитывать объявления @inbounds ($)
--math-mode={ieee,fast} Запретить или разрешить небезопасные оптимизации с плавающей запятой (переопределяет объявление @fastmath)
--polly={yes*|no} Включить или отключить полиэдральный оптимизатор Polly (переопределяет объявление @polly)
--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.
--heap-size-hint=<size> Принудительно производит сборку мусора, если использование памяти выше заданного значения. Значение может быть указано как число байтов, необязательно в единицах KB, MB, GB или TB, или как процент физической памяти с символом %.
--compile={yes*|no|all|min} Включить или отключить JIT-компилятор или запросить исчерпывающую или минимальную компиляцию
--output-o <name> Генерировать файл объектного кода (включая данные образа системы)
--output-ji <name> Генерировать файл данных образа системы (.ji)
--strip-metadata Удалить строки документации и информацию о местоположении исходного кода из образа системы
--strip-ir Удалить IR (представление промежуточного кода) скомпилированных функций
--output-unopt-bc <name> Генерировать не оптимизированный LLVM bitcode (.bc)
--output-bc <name> Генерировать LLVM bitcode (.bc)
--output-asm <name> Генерировать файл ассемблерного кода (.s)
--output-incremental={yes|no*} Генерировать файл инкрементального вывода (а не полного)
--trace-compile={stderr|name} Вывести прекомпиляционные инструкции для методов, скомпилированных во время выполнения, или сохранить их в путь
--image-codegen Принудительно генерировать код в режиме изображения
--permalloc-pkgimg={yes|no*} Скопировать раздел данных пакетов изображений в память

В Julia 1.0 по умолчанию опция --project=@. не искала файл Project.toml в корневом каталоге Git-репозитория. Начиная с Julia 1.1, она это делает.

© 2009–2024 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.11/manual/command-line-interface/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API