Чтобы запустить программу, написанную не на 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
) (хороший, гибкий вариант);
Если использован последний из вариантов (хороший, годный), то вывод программы можно всегда проверить вручную, выполнив (а оно не выполнится!!!)
os.chdir(DATA) os.system('tail program.log')
Если на сервер нужно загрузить сразу несколько файлов или просто сжать файлы для передачи, вместо самих файлов можно загрузить архив, содержащий их. Тогда для работы с этими файлами в одной из ячеек соответствующего рабочего листа 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')
Эти команды подразумевают, что в архиве находится сама программа (состоящая из одного или более файлов), а не вложенный каталог, содержащий программу. Поэтому нужно либо архивировать файлы с текстами программы напрямую (в корень архива), либо после распаковки переходить в распакованный вложенный каталог с файлами программы.
http://matplotlib.org/users/customizing.html
import matplotlib as mpl; mpl.rcParams['font.family'] = 'STIXGeneral'; mpl.rcParams['axes.labelsize'] = '18'; mpl.rcParams['xtick.labelsize'] = '18'; mpl.rcParams['ytick.labelsize'] = '18'; mpl.rcParams['axes.grid'] = 'True'; mpl.rcParams['figure.figsize'] = '5,4'; mpl.rcParams['savefig.pad_inches'] = '0.1'; mpl.rcParams['savefig.bbox'] = 'tight';
http://ask.sagemath.org/question/9581/markers-in-list_plot/?answer=14317#post-id-14317
list_plot([(1,2),(2,2),(3,3)],plotjoined=True,linestyle='',marker='v')