Python API: how to get the output?

18 Ansichten (letzte 30 Tage)
Balint
Balint am 14 Feb. 2017
I would like to call a long-running matlab function from python and print its output while it is running to see the progress. My problem is that out and err is empty if I run with async=True. Why, and how can I fix it? Here is my python code:
import StringIO
import matlab.engine
import time
out = StringIO.StringIO()
err = StringIO.StringIO()
eng = matlab.engine.start_matlab()
future = eng.long_running(5, stdout=out, stderr=err, async=True)
while not future.done():
time.sleep(2)
print 'output', out.getvalue(), err.getvalue()
print 'result', future.result()
eng.quit()
And the matlab function:
function [ result ] = long_running( secs )
%LONG_RUNNING This function runs for a long time and write to stdout
result = 0;
disp('Long_running function started running...')
for i = 1:secs
fprintf('%d iteration\n',i)
result = result + 1;
pause(1);
end
disp('Long_running function finished running.')
end

Akzeptierte Antwort

Bo Li
Bo Li am 14 Feb. 2017
When "async" is set to true, the result along with the output/error are not available until "future.result" is called. How about adding "future.result" after the while loop like this?
while not future.done():
time.sleep(2)
future.result()
print 'output', out.getvalue(), err.getvalue()
print 'result', future.result()
eng.quit()
  2 Kommentare
Balint
Balint am 14 Feb. 2017
If there is no way to access the output/error stream while the function is running, than the non-async version can do the job for me. Thanks for the answer!
Sebastián Hernández
Sebastián Hernández am 11 Nov. 2017
Bearbeitet: Sebastián Hernández am 11 Nov. 2017
I need something like this:
...
std_in = StringIO.StringIO()
future = eng.long_running(5, stdout=out, stderr=err, stdin=std_in, async=True)
std_in.write(12)
...
but stdin is not a valid argument. Do you know any way to achieve this? I will run an script that has
a=input('some input')
and I need to pass the input from python.
Thanks!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Call MATLAB from Python finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by