Hi,
I am running an external .exe file that returns something to the matlab command line once it has finished. I would like to use this in an optimization but currently the enter key needs to be pressed in the command line in order for the .exe to close and then for the matlab code to continue.
Here's how i'm calling the .exe: eval(['!program',tempfilename]);
Is there a way I can continue after it has finished? I have tried a timer and the java robot, but neither seem to work.
Thanks,

댓글 수: 1

Rik
Rik 2021년 6월 9일
You will have to find a way to get your program to work without interaction.
Also, why aren't you using system instead of eval?

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

 채택된 답변

Joel Lynch
Joel Lynch 2021년 6월 9일
편집: Joel Lynch 2021년 6월 9일

0 개 추천

You can use system() function to pass the command (as a string) without the "!" symbol. If using unix OS, you can pipe (with the | character) a newline character entry ( with echo -e '\n') to a program. System will wait until both commands are completed. Note: the double apostrophes around \n are needed as escape characters and print an apostrophe.
system(['echo -e ''\n'' | ',some_exe_str]);
Not sure if using Windows...

댓글 수: 8

SamiamO
SamiamO 2021년 6월 9일
Sorry, yes using Windows. Thanks, i'll try this!
Joel Lynch
Joel Lynch 2021년 6월 9일
echo and piping should work in system() on windows, but the key entry may not. I would look around other forums for ways to simualte keystrokes in windows command line. Whatever approach you find just needs to replace the "echo -e '\n'" bit, and you can test the command in powershell outside of matlab first.
SamiamO
SamiamO 2021년 6월 9일
편집: Walter Roberson 2021년 6월 10일
status = system(sprintf('Program "%s" <NUL',tempfilename));
This seems to work using <NUL but then I get the following on the command line which might be a problem:
forrtl: severe (24): end-of-file during read, unit -4, file CONIN$
Image PC Routine Line Source
Program.exe 008AC610 Unknown Unknown Unknown
Joel Lynch
Joel Lynch 2021년 6월 9일
That looks like an internal error of the executable you are running. Are you sure the executable would run correctly outside of MATLAB?
SamiamO
SamiamO 2021년 6월 9일
Hi,
This has worked for me: status = system(sprintf('echo. | program "%s" ',tempfilename));
Thanks so much for your help!
Glad to hear it. What does the period after echo do?
You shouldn't need to use sprintf though, this should work too and be simpler:
status = system( [ 'echo. | program ',tempfilename] );
assuming tempfilename is a string.
Or with the double quote:
status = system( [ 'echo. | program "' tempfilename '"'] );
SamiamO
SamiamO 2021년 6월 10일
Thanks all, working perfectly now! - also the period is not necessary, thanks for pointing that out.

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

제품

릴리스

R2020a

태그

질문:

2021년 6월 9일

편집:

2021년 6월 10일

Community Treasure Hunt

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

Start Hunting!

Translated by