Получение октавы для построения графика при вызове функции из командной строки

Я пытаюсь запустить функцию в octave из командной строки. В настоящее время функция запускается так:

octave --silent --persist --eval 'function(input arguments)'

function.m содержит plot команда. Когда я призываю octave с указанными выше параметрами командной строки график действительно отображается, но октава переходит в интерактивный режим. Мой вопрос:

Есть ли способ заставить октаву отображать график, не переходя в интерактивный режим, когда он вызывается из командной строки?

5 ответов

Решение

AFAIK, окно графика является дочерним процессом октавы и поэтому может отображаться только когда октава работает. Даже если вы строите что-либо из "интерактивного" режима, оставьте график открытым и закройте октаву, график также исчезнет.
Что вы можете сделать, так это построить какой-нибудь выходной файл, такой как опубликованный здесь:

f = figure
set(f, "visible", "off")
plot([1,2,3,4])
print("MyPNG.png", "-dpng")

Просто используйте pause после ваших функций построения

Ты можешь использовать:

waitfor(h)

в конце, который ждет вас, чтобы закрыть фигуру.

Вам нужно выбрать подходящий графический инструментарий:

available_graphics_toolkits 
ans = 
{
  [1,1] = fltk
  [1,2] = gnuplot
}

По умолчанию fltk который не может записать в файл без отображения графика. Однако, если вы выберете gnuplot он сможет записывать в файл, не отображая его первым. В вашем файле начните с:

graphics_toolkit gnuplot

Проблема в том, что при запуске из командной строки, когда она заканчивается, окна графиков исчезают вместе с ней.

#! /usr/bin/octave -qf
f = figure;
set(f, "visible", "off")

t=0:0.001:5*pi;
plot(t, sin(5*t)), grid

print("MyPNG.png", "-dpng")

Это сохраняет вывод в MyPNG.png в каталоге, где он запускается.

Тогда вы можете открыть его с помощью программы визуализации.

Другой вариант - добавить

pause

в конце программы, поэтому он ожидает завершения ввода пользователем, поэтому закрывает окно графика.

Ура:)

Also can try wait for key.

while (waitforbuttonpress ()==0) pause(1) end

Другие вопросы по тегам