Próbuję wyłączyć wyjście z sekcji kodu w skrypcie (a mianowicie inicjalizacji sieci z sieci Caffe). Próbowałem owijać odpowiedni bit kodu w poleceniu {x0}}

[suppressed_output, var_output] = evalc('someFunction(input)');

Ale to nie działa. Nadal mam ładunki linii wyjścia (nieokranowe) z inicjalizacji sieci, które zatykają moje dzienniki (pośród wszystkich poszukiwanych wyjść drukowanych przez fprintf('') w skrypcie). Myślę, że tak się dzieje, ponieważ odpowiednia funkcja pisza do STDERR (zamiast STDOUT?) - Pierwsza linia drukuje jest to ostrzeżenie:

WARNING: Logging before InitGoogleLogging() is written to STDERR

... a następnie setki linii tego, co robi, np., np.:

I0215 15:01:51.840272 28620 upgrade_proto.cpp:66] Attempting to upgrade input file specified using deprecated input fields: tmp-def.prototxt
I0215 15:01:51.840360 28620 upgrade_proto.cpp:69] Successfully upgraded file specified using deprecated input fields.
...

Czy mogę w jakiś sposób tłumić wyjście do STDERR (bez bałaganu z zawartością funkcji)? Idealnie tylko lokalnie dla tej konkretnej funkcji, ponieważ nadal chciałbym uzyskać potencjalne komunikaty o błędach.

W przypadku istotnego: Nazywam myScript przez wiersz polecenia Matlab i jego wyjście zapisane do dziennika (mlexec.log) z tee:

matlab -nodesktop -nosplash -display :1 -r "try, myScript; catch e, disp(getReport(e)), end, quit force" 2>&1| tee mlexec.log
1
Honeybear 15 luty 2017, 17:29

2 odpowiedzi

Najlepsza odpowiedź

Problem polega na tym, że w wywołaniu wiersza polecenia Matlab wyjście z STDERR jest przesyłane do STDOUT przez to "polecenie": {x2}}. Ponieważ plik .CPP wydaje się przesyłać strumieniowo wyjście do STDERR (zgodnie z ostrzeżeniem), zostanie on przekazany do STDOUT i ostatecznie dziennik.

Streaming STDERR (2) do Nirvana za pomocą 2>NUL lub innego pliku dziennika (np. 2>mlexec.stderr.log) rozwiązuje problem.

0
Honeybear 20 luty 2017, 08:30

Chciałem to opublikować w komentarzu, ale powiedziałem, że musiałem mieć 50 reputacji (mam teraz 49 ...)

Myślę, że Oto szukasz Edytuj / Aktualizuj:

Jedną rzeczą, którą możesz zrobić, jest załączyć sekcję swojego kodu z instrukcjami ON / OFF w następujący sposób:

warning('off','all')
%your code here
warning('on','all')

Powinno to powstrzymać wyjście o ostrzeżenia do stderr z tej sekcji. Osobiście nie polecam tego, dobrze jest wiedzieć, co robisz, że wykonawcę Matlab nie lubi.

-2
robotHamster 15 luty 2017, 17:27