Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Наступна ревізія | Попередня ревізія | ||
sage_tricks [2014/07/27 13:43] wombat створено |
sage_tricks [2015/03/24 11:43] (поточний) wombat |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
+ | ===== Запуск произвольных программ на Sage-сервере ===== | ||
+ | |||
+ | Чтобы запустить программу, написанную не на Python, а на других языках программирования (C/C++, Fortran, ...), на Sage-сервере, используя Sage Notebook только как графический веб-интерфейс для этого, можно: | ||
+ | |||
+ | **1.** //**Загрузить**// в какой-либо рабочий лист (например, новый) свой файл с программой. Назовём его для примера ''program.c'' | ||
+ | |||
+ | **2.** //**Скомпилировать**// программу в исполнимый файл. Для этого в одной из ячеек рабочего листа выполнить команды: | ||
+ | |||
+ | os.chdir(DATA) | ||
+ | os.system('gcc -o program.bin -program.c') | ||
+ | |||
+ | или | ||
+ | |||
+ | os.system('cc -lm -fopenmp -o program.bin program.c') | ||
+ | |||
+ | или | ||
+ | |||
+ | os.system("gfortran -o program.bin *.f90") | ||
+ | | ||
+ | |||
+ | **3.** Затем //**выполнить**// скомпилированную программу | ||
+ | |||
+ | os.chdir(DATA) | ||
+ | os.system('./program.bin') | ||
+ | |||
+ | ==== Примечание: Вывод на экран ==== | ||
+ | |||
+ | Если в программе используется вывод чего-либо на экран (например, ''printf()'' в языке C), то программа будет работать только тогда, когда её рабочий лист открыт в окне браузера. Это связано с тем, что вывод на экран буферизируется, и когда вы закрываете рабочий лист, буфер начинает заполняться, так как реального вывода на экран не происходит. После заполнения буфера ядро ОС приостанавливает работу программы до тех пор, пока всё накопившееся в буфере не будет //реально// выведено на экран. | ||
+ | |||
+ | Чтобы избежать остановки расчётов через пару минут после закрытия браузера, существует несколько вариантов: | ||
+ | |||
+ | * Не использовать вывод на экран в программе вообще (выкинуть все ''printf()''-ы) //(плохой, неудобный вариант)//; | ||
+ | * Вместо вывода на экран запрограммировать вывод в файл (заменить все ''printf(...)'' на ''fprintf(file,...)'') //(плохой, негибкий вариант)//; | ||
+ | * Перенаправить вывод программы в файл средствами командной оболочки (запускать как ''./program.bin > program.log'') //(хороший, гибкий вариант)//; | ||
+ | |||
+ | FIXME Если использован последний из вариантов (хороший, годный), то вывод программы можно всегда проверить вручную, выполнив ''**(а оно не выполнится!!!)**'' | ||
+ | |||
+ | os.chdir(DATA) | ||
+ | os.system('tail program.log') | ||
+ | |||
+ | |||
+ | ===== Загрузка архива на Sage-сервер ===== | ||
+ | |||
+ | Если на сервер нужно загрузить сразу несколько файлов или просто сжать файлы для передачи, вместо самих файлов можно загрузить архив, содержащий их. Тогда для работы с этими файлами в одной из ячеек соответствующего рабочего листа Sage нужно выполнить команду распаковки загруженного архива. В зависимости от типа архива, команды могут быть такими: | ||
+ | |||
+ | os.chdir(DATA) # вход в каталог -- общая для всех | ||
+ | os.system('unzip infinite_cycle.zip') | ||
+ | os.system('tar -xf infinite_cycle.tar.xz') | ||
+ | os.system('tar -xf infinite_cycle.tar.bz2') | ||
+ | os.system('tar -xf infinite_cycle.tar.gz') | ||
+ | os.system('unxz infinite_cycle.c.xz') | ||
+ | os.system('bunzip2 infinite_cycle.c.bz2') | ||
+ | os.system('gunzip infinite_cycle.c.gz') | ||
+ | |||
+ | Эти команды подразумевают, что в архиве находится сама программа (состоящая из одного или более файлов), а не вложенный каталог, содержащий программу. Поэтому нужно либо архивировать файлы с текстами программы напрямую (в корень архива), либо после распаковки переходить в распакованный вложенный каталог с файлами программы. | ||
+ | |||
+ | |||
===== Тонкая настройка matplotlib ===== | ===== Тонкая настройка matplotlib ===== | ||
Рядок 14: | Рядок 71: | ||
mpl.rcParams['savefig.bbox'] = 'tight'; | mpl.rcParams['savefig.bbox'] = 'tight'; | ||
</code> | </code> | ||
+ | |||
+ | ===== Русский текст на рисунке ===== | ||
+ | |||
+ | http://ask.sagemath.org/question/11355/cyrillic-text-on-the-plot | ||
+ | |||
+ | ===== Произвольный маркер в list_plot ===== | ||
+ | |||
+ | http://ask.sagemath.org/question/9581/markers-in-list_plot/?answer=14317#post-id-14317 | ||
+ | |||
+ | <code python> | ||
+ | list_plot([(1,2),(2,2),(3,3)],plotjoined=True,linestyle='',marker='v') | ||
+ | </code> | ||
+ | |||
+ | |||
+ |