подавите запускают сообщение Matlab

Argh - отрава моего существования за прошлую неделю. Sqlite3 блокирует файл дб когда любой процесс записи к базе данных. IE любой ОБНОВЛЯЕТ/ВСТАВЛЯЕТ запрос типа (также избранное количество (*) по некоторым причинам). Однако это обрабатывает несколько чтений очень хорошо.

Так, я наконец был расстроен достаточно для записи моего собственного кода блокировки потока вокруг вызовов базы данных. Путем обеспечения, что приложение может только иметь один поток, пишущий в базу данных в любой точке, я смог масштабироваться к 1000-м потоков.

И да, его медленное как ад. Но также достаточно быстрый и корректный , который является хорошим свойством для имения.

14
задан Amro 18 January 2011 в 15:53
поделиться

5 ответов

Вы можете использовать команду Unix "tail + n" для удаления первых n строк вывода. Этот заголовок выглядит как 10 строк, поэтому он будет разделен.

$ matlab -nosplash -nodesktop -nodisplay -r test | tail +10

Это немного хрупко, так как предупреждения (например, «без оконной системы») будут удалены, а размер заголовка будет варьироваться в зависимости от того, какие предупреждения появляются. (и эти предупреждения являются полезной диагностикой). Кроме того, это предупреждение может быть на STDERR, а не на STDOUT, поэтому вам может понадобиться "tail +9".

Более надежным подходом может быть изменение сценария Matlab для записи в отдельный файл с помощью fopen / fprintf / fclose . Таким образом, заголовок, предупреждения, ошибки и т. Д. Из Matlab будут отделены от желаемого форматированного вывода. Чтобы получить вывод "disp" для перехода к этому отдельному дескриптору файла, вы можете записать его с помощью evalc. Файл Outfile можно указать с помощью аргумента test () в сообщении -r и переменной $$ env (PID процесса bash), включенной в имя файла, чтобы предотвратить коллизии в многопроцессорной среде.

function test(ppid)
outfile = sprintf('outfile-%d.tmp', ppid);
fh = fopen(outfile, 'w');
myvar = rand(3,4);
str = evalc('disp(myvar)');
fprintf(fh, '%s', str);
fclose(fh);

Чтобы вызвать его из bash, используйте эту форму вызова. (Здесь могут быть незначительные синтаксические проблемы; у меня сейчас нет Unix-бокса для тестирования.)

% matlab -nosplash -nodisplay -r "test($$)" -logfile matlab-log-$$.tmp

Допустим, ваш PID bash - 1234. Теперь у вас есть результат в файле outfile-1234.tmp и Matlab. войдите в matlab-log-1234.tmp. Вставьте их в / tmp, если вы не хотите зависеть от pwd. Вы можете расширить это, чтобы создать несколько выходных файлов из одного вызова Matlab, сэкономив затраты на запуск, если вам нужно вычислить несколько вещей.

s PID), включенный в имя файла, чтобы предотвратить конфликты в многопроцессорной среде.

function test(ppid)
outfile = sprintf('outfile-%d.tmp', ppid);
fh = fopen(outfile, 'w');
myvar = rand(3,4);
str = evalc('disp(myvar)');
fprintf(fh, '%s', str);
fclose(fh);

Чтобы вызвать его из bash, используйте эту форму вызова. (Здесь могут быть незначительные синтаксические проблемы; у меня сейчас нет Unix-бокса для тестирования.)

% matlab -nosplash -nodisplay -r "test($$)" -logfile matlab-log-$$.tmp

Допустим, ваш PID bash - 1234. Теперь у вас есть результат в файле outfile-1234.tmp и Matlab. войдите в matlab-log-1234.tmp. Вставьте их в / tmp, если вы не хотите зависеть от pwd. Вы можете расширить это, чтобы создать несколько выходных файлов из одного вызова Matlab, сэкономив затраты на запуск, если вам нужно вычислить несколько вещей.

s PID), включенный в имя файла, чтобы предотвратить конфликты в многопроцессорной среде.

function test(ppid)
outfile = sprintf('outfile-%d.tmp', ppid);
fh = fopen(outfile, 'w');
myvar = rand(3,4);
str = evalc('disp(myvar)');
fprintf(fh, '%s', str);
fclose(fh);

Чтобы вызвать его из bash, используйте эту форму вызова. (Здесь могут быть незначительные синтаксические проблемы; у меня сейчас нет Unix-бокса для тестирования.)

% matlab -nosplash -nodisplay -r "test($$)" -logfile matlab-log-$$.tmp

Допустим, ваш PID bash - 1234. Теперь у вас есть результат в файле outfile-1234.tmp и Matlab. войдите в matlab-log-1234.tmp. Вставьте их в / tmp, если вы не хотите зависеть от pwd. Вы можете расширить это, чтобы создать несколько выходных файлов из одного вызова Matlab, сэкономив затраты на запуск, если вам нужно вычислить несколько вещей.

tmp и журнал Matlab в matlab-log-1234.tmp. Вставьте их в / tmp, если вы не хотите зависеть от pwd. Вы можете расширить это, чтобы создать несколько выходных файлов из одного вызова Matlab, сэкономив затраты на запуск, если вам нужно вычислить несколько вещей.

tmp и журнал Matlab в matlab-log-1234.tmp. Вставьте их в / tmp, если вы не хотите зависеть от pwd. Вы можете расширить это, чтобы создать несколько выходных файлов из одного вызова Matlab, сэкономив затраты на запуск, если вам нужно вычислить несколько вещей.

9
ответ дан 1 December 2019 в 12:01
поделиться

Попробуйте использовать параметр командной строки -logfile :

 -logfile log - Сделайте копию любого вывода в командное окно
в файловом журнале. Сюда входят все отчеты о сбоях.

Затем вы можете легко удалить первые несколько строк любым удобным для вас способом (например, sed). Пример:

matlab.exe -nosplash -nodesktop -nojvm -logfile out.log -r 'rand(3,3), exit'
sed '1,5d' out.log

Также, если вы работаете из сценария, где вам нужно завершить выполнение перед продолжением, используйте параметр -wait :

-wait      - MATLAB is started by a separate starter program
           which normally launches MATLAB and then immediately
           quits. Using the -wait option tells the starter
           program not to quit until MATLAB has terminated.
           This option is useful when you need to process the
           the results from MATLAB in a script. The call to
           MATLAB with this option will block the script from
           continuing until the results are generated.

Дополнительную информацию о параметрах запуска MATLAB можно найти здесь , или на страницах справочников по исполняемым файлам matlab : Windows / Unix

11
ответ дан 1 December 2019 в 12:01
поделиться

Я бы рекомендовал сохранить вывод в файл, а затем прочитать его. Этот подход немного сложнее, но менее уязвим при изменении форматов и т. Д. Он дает вам гораздо больше контроля. В Интернете вы найдете множество скриптов для преобразования файлов Matlab на другой основной язык.

Пример:

A = randn(3, 2);
save temp_output.mat A
# Later, read temp_output.mat in whichever language you desire.
2
ответ дан 1 December 2019 в 12:01
поделиться

Чтобы отключить отображение ans = , вы можете использовать функцию DISP :

disp(rand(3,4));

Чтобы подавить это первое предупреждающее сообщение, вы можете попробовать добавив параметр -nojvm , чтобы посмотреть, поможет ли это.

Чтобы подавить все остальное, вы можете попробовать это решение из потока группы новостей MathWorks, которое решает ту же проблему.

2
ответ дан 1 December 2019 в 12:01
поделиться

Вызов MATLAB, подобный этому

matlab -nodisplay  <test.m &>matlab.output

, сбрасывает все сообщения запуска и другие отображаемые выходные данные в файл matlab.output (который можно назвать как угодно). Если вы затем (следуя совету Питера) попросите test.m сохранить нужный результат в файл с помощью

csvwrite('temp_output.txt',A)

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

1
ответ дан 1 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: