Октава: Как предотвратить закрытие окна графика? - PullRequest
0 голосов
/ 29 сентября 2018

В октавном CLI или октавном графическом интерфейсе, если я запусту

plot([1,2,3],[1,4,9])

, отобразится окно графика, на которое я смогу смотреть и взаимодействовать.Однако, если я создаю файл myPlot.m с той же командой, что и для содержимого

plot([1,2,3],[1,4,9])

, и запускаю его с

octave myPlot.m

, я могу кратко увидеть, как окно графика появляется для дробисекунды и немедленно закрыться.Как я могу предотвратить закрытие этого окна?

Octave 4.2.2 Ubuntu 18.04

1 Ответ

0 голосов
/ 09 октября 2018

Вот полный пример, учитывая путаницу в комментариях.

Предположим, вы создаете скрипт с именем plotWithoutExiting.m, предназначенный для вызова непосредственно из оболочки linux, а не из интерпретатора octave:

#!/opt/octave-4.4.1/bin/octave

h = plot(1:10, 1:10);
waitfor(h)
disp('Now that Figure Object has been destroyed I can exit')

Первая строка в linux соответствует синтаксису 'shebang';этот специальный комментарий сообщает оболочке bash, какой интерпретатор следует запустить для выполнения приведенного ниже сценария.Я использовал местоположение моего исполняемого файла октавы здесь, ваш может быть расположен в другом месте;Адаптируйте соответственно.

Затем я изменяю разрешения в оболочке bash, чтобы сделать этот файл исполняемым

chmod +x ./plotWithoutExiting.m

Затем я могу запустить файл, запустив его:

./plotWithoutExiting.m

В качестве альтернативы вы можете пропустить разрешения «shebang» и исполняемый файл и попытаться запустить этот файл, явно вызвав интерпретатор октавы, например:

octave ./plotWithoutExiting.m

или даже

octave --eval "plotWithoutExiting"

Youтакже можно добавить параметр --no-gui, чтобы предотвратить мгновенное появление октавного графического интерфейса пользователя.

Затем должен запуститься приведенный выше сценарий, захватив график в дескриптор объекта фигуры h.waitfor(h) затем приостанавливает выполнение программы до тех пор, пока объект фигуры не будет уничтожен (например, закрытием окна вручную).

Теоретически, если вам не нужно собирать маркеры фигуры, вы можете просто использовать waitfor(gcf), чтобыприостанавливать выполнение до тех пор, пока последний активный объект фигуры не будет уничтожен.

Как только это произойдет, программа продолжит работу в обычном режиме, пока не завершится.Если вы не используете интерпретатор октав в интерактивном режиме, это обычно также приводит к выходу из среды октав (вы можете предотвратить это, используя параметр --persist, если это не то, что вам нужно).

Надеюсь, это поможет.

...