Difference between revisions of "Ejudge-execute"
 (→Примеры использования)  | 
				|||
| (11 intermediate revisions by the same user not shown) | |||
| Line 9: | Line 9: | ||
Здесь <tt>OPTIONS</tt> - опции программы ejudge-execute, <tt>PROGRAM</tt> - программа для запуска,  | Здесь <tt>OPTIONS</tt> - опции программы ejudge-execute, <tt>PROGRAM</tt> - программа для запуска,  | ||
<tt>ARGS</tt> - аргументы запускаемой программы.  | <tt>ARGS</tt> - аргументы запускаемой программы.  | ||
| + | |||
| + | === Опции ===  | ||
Поддерживаются следующие опции программы ejudge-execute.  | Поддерживаются следующие опции программы ejudge-execute.  | ||
<table border="1">  | <table border="1">  | ||
| + |   <tr>  | ||
| + |     <td><tt>--version</tt></td>  | ||
| + |     <td>Вывести на стандартный поток вывода версию системы ejudge и завершить выполнение с кодом завершения 0.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--help</tt></td>  | ||
| + |     <td>Вывести на стандартный поток вывода краткую справку о поддерживаемых опциях и завершить выполнение с кодом завершения 0.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--stdin=FILE</tt></td>  | ||
| + |     <td>Перенаправить стандартный поток ввода запускаемой программы на чтение из указанного файла. Указанный файл должен существовать  | ||
| + | и быть доступным на чтение.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--stdout=FILE</tt></td>  | ||
| + |     <td>Перенаправить стандартный поток вывода запускаемой программы на запись в указанный файл. Если указанный файл не существовал, он создается, если файл существовал, он очищается.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--stderr=FILE</tt></td>  | ||
| + |     <td>Перенаправить стандартный поток ошибок запускаемой программы на запись в указанный файл. Если указанный файл не существовал, он создается, если файл существовал, он очищается.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--workdir=DIR</tt></td>  | ||
| + |     <td>Установить в качестве рабочего каталога запускаемой программы указанный каталог.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--test-file=FILE</tt></td>  | ||
| + |     <td>Задать имя файла с тестовыми данными.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--corr-file=FILE</tt></td>  | ||
| + |     <td>Задать имя файла с эталонным ответом.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--info-file=FILE</tt></td>  | ||
| + |     <td>Задать имя файла с дополнительной информацией о тестах.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--input-file=FILE</tt></td>  | ||
| + |     <td>Имя входного файла (для программ, считывающих входные данные из файла, а не со стандартного потока ввода).</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--output-file=FILE</tt></td>  | ||
| + |     <td>Имя выходного файла (для программ, выводящих результат работы в файл, а не на стандартный поток вывода).</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--clear-env</tt></td>  | ||
| + |     <td>Очистить окружение для запускаемой программы.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--env=NAME=VALUE</tt></td>  | ||
| + |     <td>Установить значение переменной окружения NAME в значение VALUE.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--time-limit=TL</tt></td>  | ||
| + |     <td>Установить ограничение процессорного времени для запускаемой программы в указанное время в секундах.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--time-limit-millis=TLMS</tt></td>  | ||
| + |     <td>Установить ограничение процессорного времени для запускаемой программы в указанное время в миллисекундах  | ||
| + | (данная опция отменяет действие опции --time-limit, если заданы обе).</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--real-time-limit=TL</tt></td>  | ||
| + |     <td>Установить ограничение астрономического времени для запускаемой программы в указанное время в секундах.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--no-core-dump</tt></td>  | ||
| + |     <td>Запретить генерацию дампа памяти программы в случае аварийного завершения программы.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--kill-signal=SIG</tt></td>  | ||
| + |     <td>При принудительном завершении программы из-за истечения отведенного ей лимита процессорного или  | ||
| + | астрономического времени посылать программе сигнал SIG (может быть KILL, TERM или INT).</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--memory-limit</tt></td>  | ||
| + |     <td>Включить поддержку распознавания ошибки превышения ограничения на размер виртуального адресного  | ||
| + | пространства (memory limit exceeded). Поддерживается только при установленном патче на ядро Linux.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--secure-exec</tt></td>  | ||
| + |     <td>Включить режим защищенного выполнения программы. Поддерживается только при установленном  | ||
| + | патче на ядро Linux.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--security-violation</tt></td>  | ||
| + |     <td>Включить поддержку распознавания запрешенных действий со стороны запускаемой программы  | ||
| + | (security violation). Поддерживается только при установленном патче на ядро Linux.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--use-stdin</tt></td>  | ||
| + |     <td></td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--use-stdout</tt></td>  | ||
| + |     <td></td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--max-vm-size=SZ</tt></td>  | ||
| + |     <td>Установить ограничение на максимальный размер виртуального адресного пространства. При указании размера допускается использование суффиксов K, M и G, обозначающих килобайты (2<sup>10</sup>), мегабайты (2<sup>20</sup>) и гигабайты (2<sup>30</sup>) соответственно.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--max-stack-size=SZ</tt></td>  | ||
| + |     <td>Установить ограничение на максимальный размер стека процесса. При указании размера допускается использование суффиксов K, M и G, обозначающих килобайты (2<sup>10</sup>), мегабайты (2<sup>20</sup>) и гигабайты (2<sup>30</sup>) соответственно.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--mode=MODE</tt></td>  | ||
| + |     <td>Задать права доступа к создаваемым файлам.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--group=GROUP</tt></td>  | ||
| + |     <td>Задать группу пользователей создаваемых файлов.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--test-num=NUM</tt></td>  | ||
| + |     <td>Задать номер теста.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--test-pattern=PAT</tt></td>  | ||
| + |     <td>Задать шаблон для тестовых файлов.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--corr-pattern=PAT</tt></td>  | ||
| + |     <td>Задать шаблон для файлов с эталонным ответом.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--info-pattern=PAT</tt></td>  | ||
| + |     <td>Задать шаблон для файлов с дополнительной информацией о тестах.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--update-corr</tt></td>  | ||
| + |     <td>Сохранить файл с результатом работы программы в качестве файла с эталонным ответом.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--test-dir=DIR</tt></td>  | ||
| + |     <td>Задать имя каталога, содержащего тесты, эталонные ответы и т. д.</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--all-tests</tt></td>  | ||
| + |     <td>Запустить программу на всех тестах из каталога, задаваемого опцией --test-dir</td>  | ||
| + |   </tr>  | ||
| + |   <tr>  | ||
| + |     <td><tt>--quiet</tt></td>  | ||
| + |     <td>Не выводить дополнительную (отладочную) информацию о выполнении программы.</td>  | ||
| + |   </tr>  | ||
</table>  | </table>  | ||
| + | |||
| + | === Примеры использования ===  | ||
| + | |||
| + |  ejudge-execute --use-stdin --use-stdout --test-file=003.dat --test-pattern=%03d.dat --corr-pattern=%03d.ans --time-limit=1 --mode=664 --group=olymp ../solution  | ||
| + | |||
| + | Запустить исполняемый файл <tt>../solution</tt> с перенаправлением стандартного потока ввода и стандартного потока вывода и ограничением времени 1 секунда. Стандартный поток ввода перенаправляется на чтение из копии файла 003.dat, а после завершения выполнения программы (при условии успешного завершения) вывод программы на стандартный поток вывода будет скопирован  | ||
| + | в файл 003.ans, при этом файл 003.ans получит права доступа 664 (восьмеричные, то есть rw-rw-r--) и группу пользователей  | ||
| + | olymp.  | ||
| + | |||
| + | Такого рода командные строки удобно использовать для генерации эталонных ответов по тестовым данным с помощью эталонного решения с  | ||
| + | помощью следующей команды:  | ||
| + |  for i in *.dat  | ||
| + |  do  | ||
| + |    ejudge-execute --use-stdin --use-stdout --test-file=$i --test-pattern=%03d.dat --corr-pattern=%03d.ans --time-limit=1 --mode=664 --group=olymp ../solution  | ||
| + |  done  | ||
| + | |||
| + | Если у турнира включена альтернативная раскладка файлов, при веб редактировании тестов поддерживается возможность  | ||
| + | автоматической генерации Makefile, в котором будет находиться правило answers для перегенерации ответов по  | ||
| + | тестовым данным.  | ||
| + | |||
| + | Следующий пример использует файловый ввод-вывод:  | ||
| + |  ejudge-execute --input-file=input.txt --output-file=output.txt --test-file=03 --test-pattern=%02d --corr-pattern=%02d.a --time-limit=1 --mode=664 --group=olymp --max-vm-size=256M --max-stack-size=256M ../solution  | ||
| + | |||
| + | Тестовые данные из файла 03 перед выполнением программы будут скопированы в файл input.txt, а после выполнения  | ||
| + | программы файл output.txt будет скопирован в файл 03.a. Кроме того, ограничения на размер отображенной  | ||
| + | виртуальной памяти и на размер стека устанавливаются равными 256 мегабайт.  | ||
| + | |||
| + | Следующий пример запустит программу на всех файлах, удовлетворяющих шаблону %02d, из каталога tests  | ||
| + |  ejudge-execute --use-stdin --use-stdout --test-pattern=%02d --time-limit=1 --test-dir=tests --all-tests ./solution  | ||
| + | |||
| + | Следующий пример обновит файлы с эталонным ответом  | ||
| + |  ejudge-execute --use-stdin --use-stdout --test-pattern=%02d --corr-pattern=%02d.a --time-limit=1 --test-dir=tests --all-tests --update-corr ./solution  | ||
Latest revision as of 05:30, 23 May 2012
Навигация: Главная страница/Система ejudge/Использование/Использование из командной строки/ejudge-execute
Программа ejudge-execute позволяет запустить на выполнение программу с установкой ограничений на время выполнения, виртуальное адресное пространство и перенаправлением стандартных потоков.
Программа запускается следующим образом:
ejudge-execute [OPTIONS] PROGRAM [ARGS]
Здесь OPTIONS - опции программы ejudge-execute, PROGRAM - программа для запуска, ARGS - аргументы запускаемой программы.
Опции
Поддерживаются следующие опции программы ejudge-execute.
| --version | Вывести на стандартный поток вывода версию системы ejudge и завершить выполнение с кодом завершения 0. | 
| --help | Вывести на стандартный поток вывода краткую справку о поддерживаемых опциях и завершить выполнение с кодом завершения 0. | 
| --stdin=FILE | Перенаправить стандартный поток ввода запускаемой программы на чтение из указанного файла. Указанный файл должен существовать и быть доступным на чтение. | 
| --stdout=FILE | Перенаправить стандартный поток вывода запускаемой программы на запись в указанный файл. Если указанный файл не существовал, он создается, если файл существовал, он очищается. | 
| --stderr=FILE | Перенаправить стандартный поток ошибок запускаемой программы на запись в указанный файл. Если указанный файл не существовал, он создается, если файл существовал, он очищается. | 
| --workdir=DIR | Установить в качестве рабочего каталога запускаемой программы указанный каталог. | 
| --test-file=FILE | Задать имя файла с тестовыми данными. | 
| --corr-file=FILE | Задать имя файла с эталонным ответом. | 
| --info-file=FILE | Задать имя файла с дополнительной информацией о тестах. | 
| --input-file=FILE | Имя входного файла (для программ, считывающих входные данные из файла, а не со стандартного потока ввода). | 
| --output-file=FILE | Имя выходного файла (для программ, выводящих результат работы в файл, а не на стандартный поток вывода). | 
| --clear-env | Очистить окружение для запускаемой программы. | 
| --env=NAME=VALUE | Установить значение переменной окружения NAME в значение VALUE. | 
| --time-limit=TL | Установить ограничение процессорного времени для запускаемой программы в указанное время в секундах. | 
| --time-limit-millis=TLMS | Установить ограничение процессорного времени для запускаемой программы в указанное время в миллисекундах (данная опция отменяет действие опции --time-limit, если заданы обе). | 
| --real-time-limit=TL | Установить ограничение астрономического времени для запускаемой программы в указанное время в секундах. | 
| --no-core-dump | Запретить генерацию дампа памяти программы в случае аварийного завершения программы. | 
| --kill-signal=SIG | При принудительном завершении программы из-за истечения отведенного ей лимита процессорного или астрономического времени посылать программе сигнал SIG (может быть KILL, TERM или INT). | 
| --memory-limit | Включить поддержку распознавания ошибки превышения ограничения на размер виртуального адресного пространства (memory limit exceeded). Поддерживается только при установленном патче на ядро Linux. | 
| --secure-exec | Включить режим защищенного выполнения программы. Поддерживается только при установленном патче на ядро Linux. | 
| --security-violation | Включить поддержку распознавания запрешенных действий со стороны запускаемой программы (security violation). Поддерживается только при установленном патче на ядро Linux. | 
| --use-stdin | |
| --use-stdout | |
| --max-vm-size=SZ | Установить ограничение на максимальный размер виртуального адресного пространства. При указании размера допускается использование суффиксов K, M и G, обозначающих килобайты (210), мегабайты (220) и гигабайты (230) соответственно. | 
| --max-stack-size=SZ | Установить ограничение на максимальный размер стека процесса. При указании размера допускается использование суффиксов K, M и G, обозначающих килобайты (210), мегабайты (220) и гигабайты (230) соответственно. | 
| --mode=MODE | Задать права доступа к создаваемым файлам. | 
| --group=GROUP | Задать группу пользователей создаваемых файлов. | 
| --test-num=NUM | Задать номер теста. | 
| --test-pattern=PAT | Задать шаблон для тестовых файлов. | 
| --corr-pattern=PAT | Задать шаблон для файлов с эталонным ответом. | 
| --info-pattern=PAT | Задать шаблон для файлов с дополнительной информацией о тестах. | 
| --update-corr | Сохранить файл с результатом работы программы в качестве файла с эталонным ответом. | 
| --test-dir=DIR | Задать имя каталога, содержащего тесты, эталонные ответы и т. д. | 
| --all-tests | Запустить программу на всех тестах из каталога, задаваемого опцией --test-dir | 
| --quiet | Не выводить дополнительную (отладочную) информацию о выполнении программы. | 
Примеры использования
ejudge-execute --use-stdin --use-stdout --test-file=003.dat --test-pattern=%03d.dat --corr-pattern=%03d.ans --time-limit=1 --mode=664 --group=olymp ../solution
Запустить исполняемый файл ../solution с перенаправлением стандартного потока ввода и стандартного потока вывода и ограничением времени 1 секунда. Стандартный поток ввода перенаправляется на чтение из копии файла 003.dat, а после завершения выполнения программы (при условии успешного завершения) вывод программы на стандартный поток вывода будет скопирован в файл 003.ans, при этом файл 003.ans получит права доступа 664 (восьмеричные, то есть rw-rw-r--) и группу пользователей olymp.
Такого рода командные строки удобно использовать для генерации эталонных ответов по тестовым данным с помощью эталонного решения с помощью следующей команды:
for i in *.dat do ejudge-execute --use-stdin --use-stdout --test-file=$i --test-pattern=%03d.dat --corr-pattern=%03d.ans --time-limit=1 --mode=664 --group=olymp ../solution done
Если у турнира включена альтернативная раскладка файлов, при веб редактировании тестов поддерживается возможность автоматической генерации Makefile, в котором будет находиться правило answers для перегенерации ответов по тестовым данным.
Следующий пример использует файловый ввод-вывод:
ejudge-execute --input-file=input.txt --output-file=output.txt --test-file=03 --test-pattern=%02d --corr-pattern=%02d.a --time-limit=1 --mode=664 --group=olymp --max-vm-size=256M --max-stack-size=256M ../solution
Тестовые данные из файла 03 перед выполнением программы будут скопированы в файл input.txt, а после выполнения программы файл output.txt будет скопирован в файл 03.a. Кроме того, ограничения на размер отображенной виртуальной памяти и на размер стека устанавливаются равными 256 мегабайт.
Следующий пример запустит программу на всех файлах, удовлетворяющих шаблону %02d, из каталога tests
ejudge-execute --use-stdin --use-stdout --test-pattern=%02d --time-limit=1 --test-dir=tests --all-tests ./solution
Следующий пример обновит файлы с эталонным ответом
ejudge-execute --use-stdin --use-stdout --test-pattern=%02d --corr-pattern=%02d.a --time-limit=1 --test-dir=tests --all-tests --update-corr ./solution