Running external commands without going through a shell?

33 visualizzazioni (ultimi 30 giorni)
The Matlab system() command allows the user to run external commands. To do this, it spawns a shell, and uses it to run the provided command. (see https://fr.mathworks.com/help/matlab/ref/system.html)
This behavior is great for interactive use. However, for production code, it can cause issues with special characters as the shell will have a tendancy to over-interpret the given commands. So, for example, a directory with parenthesis in its name can cause shell errors and prevent the command from executing properly.
In the Python world, the subprocess module has a way to run commands directly, without spawning a shell (the "shell" argument):
Does Matlab have an equivalent? I know people have proposed various regular expressions to escape strings, but that is just not robust enough.

Risposta accettata

Jan
Jan il 16 Dic 2020
Maybe this works for you:
runtime = java.lang.Runtime.getRuntime();
process = runtime.exec('program arg1 arg2'); % non-blocking
% Continue Matlab processing in parallel to spawned process ...
% ...or:
rc = process.waitFor(); % block Matlab until external program ends
rc = process.exitValue(); % fetch an ended process' return code
  1 Commento
Joël Schaerer
Joël Schaerer il 21 Dic 2020
Thanks! I didn't get a chance to try it yet, but will try to report back when I do.

Accedi per commentare.

Più risposte (1)

Nitin Kapgate
Nitin Kapgate il 16 Dic 2020
You can execute operating system commands from the MATLAB command line using the ! operator as an alternative to the system function. The exclamation point character (!), sometimes called bang, is a shell escape. The ! character indicates that the rest of the input line is a command to the operating system.
Use ! to call utilities or other executable programs without quitting MATLAB.
For example, the following code opens the Microsoft Excel on a WINDOWS platform:
!excel.exe
After the external program completes or you quit the program, the operating system returns control to MATLAB.
To run the application in background mode or display the output in a separate window, add & to the end of the line.
For example, the following statement opens the Microsoft Excel program and returns control to the command prompt so that you can continue running MATLAB commands:
!excel.exe &

Categorie

Scopri di più su Environment and Settings in Help Center e File Exchange

Prodotti


Release

R2013b

Community Treasure Hunt

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

Start Hunting!

Translated by