controlling stdout

50 views
Skip to first unread message

Tom Sgouros

unread,
Dec 2, 2020, 10:34:14 PM12/2/20
to Django users
Hello all:

I have a Django application that dispatches processing to a matlab script using exec. How can I capture the stdout and stderr of the script's execution?

Outside of Django, this works for a dumb matlab script called tt that just prints a message:

>>> import matlab.engine, StringIO
>>> eng = matlab.engine.start_matlab()
>>> out = StringIO.StringIO()
>>> err = StringIO.StringIO()
>>> exec('eng.tt(25, stdout=out, stderr=err)')
>>> out.getvalue()
"This is a disp command.\n\nret =\n\n '25\n\n"

Inside a Django method, the exec seems to function properly, but the out and err variables remain empty. Where's my output? Did the logging system snatch it? I assume I'm missing something obvious here but any pointers would be welcome.

Thank you,

 -Tom


Tom Sgouros

unread,
Dec 4, 2020, 1:04:18 PM12/4/20
to django...@googlegroups.com
Anybody have any random thoughts about this? I have run out of ideas to test.

Thank you,

 -Tom

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/35b264b3-f793-4131-a6e4-700e51aebbfan%40googlegroups.com.

Kris A. Stern

unread,
Dec 4, 2020, 3:35:47 PM12/4/20
to django...@googlegroups.com
Why not try something Python based instead which is also free. What kind of functionality are you looking for? Are you planning to plot, if so you could try numpy, scipy, and matplotlib. 

Tom Sgouros

unread,
Dec 5, 2020, 8:19:07 AM12/5/20
to django...@googlegroups.com
Matlab is the native language of the group for which I am building this interface. It is for access to ocean sensor data, and it's being done this way so the scientists whose sensors they are can use a significant body of legacy code in their analyses. (Though I was planning to sneak in an option to use python scripts because that's what I prefer.) 

But the fact remains that I have no trouble capturing stdout when I run this python on the command line and it doesn't work when I run it as part of a Django views.py and I don't where to begin trying to understand why not.

 -Tom

Shaheed Haque

unread,
Dec 5, 2020, 9:08:37 AM12/5/20
to django...@googlegroups.com
I would hazard a guess that Django has already redirected stderr and or stdout before your code gets to run. 

I recommend that you stop your code in the debugger just *before* you try your redirection and look at the state of sys.stderr and sys.stdout. Also, I'm not sure if you are aware of the dunder versions of these (see https://docs.python.org/3/library/sys.html)? Comparing sys.stdout with sys.__stdout__ might reveal interesting results for example. 

Once you know what Django has already done, I expect you will be able to progress. 

Tom Sgouros

unread,
Dec 5, 2020, 4:57:56 PM12/5/20
to django...@googlegroups.com
Thank you. Now I guess I'll work on figuring out *where* it was redirected.

But the "dunder" version of sys.stdout is an excellent clue -- I did not know about that, and bonus gratitude points for giving me a new word to use.

 -Tom

Shaheed Haque

unread,
Dec 5, 2020, 5:03:13 PM12/5/20
to django...@googlegroups.com


On Sat, 5 Dec 2020, 21:57 Tom Sgouros, <tsgo...@gmail.com> wrote:
Thank you. Now I guess I'll work on figuring out *where* it was redirected.

Sounds good. 

But the "dunder" version of sys.stdout is an excellent clue -- I did not know about that, and bonus gratitude points for giving me a new word to use.

Lol. Good luck... 

Reply all
Reply to author
Forward
0 new messages