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

 채택된 답변

Bo Li
Bo Li 2017년 2월 14일

0 개 추천

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

Balint
Balint 2017년 2월 14일
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 2017년 11월 11일
편집: Sebastián Hernández 2017년 11월 11일
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!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Call MATLAB from Python에 대해 자세히 알아보기

질문:

2017년 2월 14일

편집:

2017년 11월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by