Many thanks Michael. That works perfectly :-) Regards, Alan.
On Wed, 18 Feb 2026 at 14:00, Michael Schmid <[email protected]> wrote: > Hi Alan, > > you can use this (before exec): > setOption("WaitForCompletion", false); > to immediately continue the macro after exec, without waiting. > > https://imagej.net/ij/developer/macro/functions.html#setOption > > Michael > ________________________________________________________________ > On 18.02.26 13:52, Alan Hewat wrote: > > Thanks again Fred. I can now launch my application from an imageJ macro > > with a buld.bat file using > > *exec("cmd /c start \"cmdWindow\" build.bat");* > > > > *But now my macro script waits for my application and cmdWindow to close > > before continuing.* > > > > How can I launch my application with exec(...) and immediately continue > > with my macro script without waiting ? > > > > Alan. > > > > > > On Tue, 10 Feb 2026 at 22:23, Fred Damen <[email protected]> wrote: > > > >> To be pedantic... The strings(s) that you are passing to be executed may > >> (are) not the parameters that are actually received (argv) by the > program > >> that actually gets executed: executing 'echo' as the executable will > show > >> you what actually made it to the executable program. > >> > >> Enjoy, > >> > >> Fred > >> > >> On Tue, February 10, 2026 3:23 am, Alan Hewat wrote: > >>> *Thanks Rob.* Yes, the backslash \ is a character that escapes the > >>> following character. I used backslashes historically but will try > >> forward > >>> slashes with my current modern installation. > >>> > >>> *Fred, that's brilliant !!!!!!* > >>> exec("cmd /c start \"\" build.bat"); > >>> Solves my problem ! I had already tried that, but without the double "" > >>> (escaped) which opens a new *persistent *untitled cmd window. My > previous > >>> attempt, based on the examples in > >>> https://wsr.imagej.net/macros/ExecExamples.txt also opened a new cmd > >>> window > >>> but closed it immediately, and perhaps that was the problem. I use > >> print() > >>> to check the strings I pass to exec(). > >>> > >>> *Now, to be tidy, I just need to close that cmd window, after perhaps > >>> waiting a moment. *But I'm very happy that I can finally launch > SharpCap > >>> with Python scripting from an imageJ script. > >>> > >>> Thanks also for the explanation of how exec() works. It was probably > >> quite > >>> difficult to implement, having to pass parameters through several > >> systems. > >>> It's perhaps still not quite perfect, which to my mind would mean that > >>> anything that worked in a Windows cmd shell or .bat file worked in > exec, > >>> and that exec itself would parse the string. At least, the stated > exec() > >>> requirement to use comma separated arguments when there are spaces in > the > >>> cmd string, like > >>> exec("cmd", "/c", "start", "excel.exe", path); > >>> no longer seems necessary. > >>> > >>> Thanks again to all who responded, suggested new ideas, and solved my > >>> problem. Alan. > >>> > >>> On Tue, 10 Feb 2026 at 06:26, Fred Damen <[email protected]> wrote: > >>> > >>>> Greetings, > >>>> > >>>> A slightly more complicated explanation... > >>>> > >>>> ImageJ's macro function exec passes its parameters to JVM, which > passes > >>>> its parameters to posix system call, which requests the OS to execute > an > >>>> executable. At each stage things are manipulated. System shell > commands > >>>> are not actually executables. You need to pass your shell command > (.bat) > >>>> to an executable (cmd) to execute it. > >>>> exec("cmd /c start \"\" build.bat"); > >>>> see: > >>>> > >>>> > >> > https://stackoverflow.com/questions/615948/how-do-i-run-a-batch-file-from-my-java-application > >>>> second answer. > >>>> > >>>> If you want to try and figure out what is going on and resolve the > >>>> issue, > >>>> try and execute the 'echo' command with your command as its > parameters; > >>>> echo simply displays its parameters. This will be frustrating and > >>>> enlightening, although it may help... > >>>> > >>>> > >>>> Fred > >>>> > >>>> On Mon, February 9, 2026 9:50 am, Alan Hewat wrote: > >>>>> Thanks Fred. > >>>>> > >>>>> Unfortunately *ImageJ exec() doesn't run Windows .bat files as > >>>> expected > >>>>> either :-(* > >>>>> > >>>>> I have a simple .bat file containing one line, that *executes without > >>>>> error > >>>>> when I double-click it in Windows* > >>>>> "C:\Program Files\SharpCap 4.1 (64 bit)\SharpCap.exe" /language=fr > >>>>> It launches SharpCap <https://docs.sharpcap.co.uk/4.1/>, a popular > >>>> imaging > >>>>> application for astronomers, with a command-line argument that > >>>> specifies > >>>>> the language > >>>>> > >>>>> If instead I execute it within an imageJ script with > >>>>> status = exec("C:\Program Files\SharpCap 4.1 (64 bit)\SharpCap.exe" > >>>>> /language=fr); > >>>>> It launches SharpCap but the in-line argument disables SharpCap's own > >>>>> IronPython script with a "codepage___0" error. > >>>>> (It does work without the in-line argument, and I want to input more > >>>>> complicated arguments than the trivial /language). > >>>>> > >>>>> Other users have reported similar problems and it was suggested > >>>>> <https://forums.sharpcap.co.uk/viewtopic.php?t=6762>that the code > >> page > >>>> or > >>>>> environment variables may be set differently. > >>>>> This problem occurs however I try to execute SharpCap with exec(), > >>>> e.g. > >>>>> https://wsr.imagej.net/macros/ExecExamples.txt > >>>>> There is a nice example > >>>>> <https://imagej.net/ij/macros/tools/VideoCaptureTool.txt> of using > >>>> exec() > >>>>> with command-line arguments to record and playback VirtualDub video > >>>>> That works for me, but doesn't help me understand my problem. > >>>>> > >>>>> *So is there any other way of launching a Windows process from an > >>>> imageJ > >>>>> macro other than exec() ?* > >>>>> > >>>>> Regards, Alan. > >>>>> > >>>>> On Mon, 9 Feb 2026 at 05:45, Fred Damen <[email protected]> wrote: > >>>>> > >>>>>> Greetings, > >>>>>> > >>>>>> Generally when I need to run a command line program from within a > >>>>>> program > >>>>>> I am writing and the passing of arguments becomes to frustrating (as > >>>>>> there > >>>>>> are many layers of retranslating the command syntax), I write a > >>>> command > >>>>>> line command in the OS(es) native macro language, .bat/.cmd in your > >>>>>> case. > >>>>>> Then the only thing that I need to get correct in the calling > program > >>>> is > >>>>>> executing the OS macro command itself - which you seem to have > >>>>>> accomplished. > >>>>>> > >>>>>> Enjoy, > >>>>>> > >>>>>> Fred > >>>>>> > >>>>>> > >>>>>> On Sun, February 8, 2026 3:22 am, Alan Hewat wrote: > >>>>>>> SharpCap <https://docs.sharpcap.co.uk/4.1/> is a popular > >>>> astronomical > >>>>>>> imaging application and can be launched from a Windows cmd shell > >>>> with > >>>>>>> a command-line > >>>>>>> argument > >>>>>> <https://docs.sharpcap.co.uk/4.0/34_CommandLineArguments.htm>, > >>>>>>> like this: > >>>>>>> C:\Users\alanh>"..\\..\\Program Files\\SharpCap 4.1 (64 > >>>>>>> bit)\\SharpCap.exe" > >>>>>>> /runscript d:\\cameraList.py > >>>>>>> This correctly launches SharpCap to run a Python script > >>>> cameraList.py > >>>>>> to > >>>>>>> list available cameras (or whatever else is requested). > >>>>>>> > >>>>>>> ImageJ has an exec() function > >>>>>>> <https://wsr.imagej.net/developer/macro/functions.html#E> that can > >>>> be > >>>>>> used > >>>>>>> to launch applications from an imageJ script. The following > >>>> launches > >>>>>>> SharpCap, but apparently doesn't pass the /runscript argument > >>>>>> correctly > >>>>>>> because SharpCap scripting reports an error and doesn't work. > >>>>>>> SharpCap = getDirectory("startup")+"..\\..\\Program Files\\SharpCap > >>>>>> 4.1 > >>>>>>> (64 > >>>>>>> bit)\\SharpCap.exe"; > >>>>>>> status=exec (SharpCap+" /runscript d:\\cameraList.py"); > >>>>>>> > >>>>>>> Guided by the exec() function > >>>>>>> <https://imagej.net/ij/macros/ExecExamples.txt> examples, I tried > >>>>>> instead: > >>>>>>> status=exec("cmd", "/c", "start", SharpCap, " /runscript", " > >>>>>>> d:\\cameraList.py" ); > >>>>>>> but an error that "*Windows can't find /runscript*" is returned as > >>>> if > >>>>>> it > >>>>>>> thinks */runscript* is an application. > >>>>>>> Replacing */runscript* with the application *SharpCap* as below > >>>> works, > >>>>>> but > >>>>>>> I don't understand why > >>>>>>> status=exec("cmd", "/c", "start", SharpCap, SharpCap, " > >>>> /runscript", " > >>>>>>> d:\\cameraList.py" ); > >>>>>>> That launches SharpCap, and no error is reported, but the script is > >>>>>> not > >>>>>>> executed. > >>>>>>> > >>>>>>> *The last attempt seems to be close to working, but I must have > >>>> made > >>>>>> some > >>>>>>> mistake in the exec() syntax.* > >>>>>>> > >>>>>>> The latest versions of imageJ and Win-11 were used. Any suggestions > >>>>>> would > >>>>>>> be appreciated. Alan. > >>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> *_______________________________* > >>>>>>> Dr Alan Hewat, NeutronOptics > >>>>>>> Grenoble, FRANCE (from computer) > >>>>>>> [email protected] > >>>>>>> +33.476984168 VAT:FR79499450856 > >>>>>>> http://NeutronOptics.com/hewat <http://neutronoptics.com/hewat> > >>>>>>> _______________________________ > >>>>>>> > >>>>>>> -- > >>>>>>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >>>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> *_______________________________* > >>>>> Dr Alan Hewat, NeutronOptics > >>>>> Grenoble, FRANCE (from computer) > >>>>> [email protected] > >>>>> +33.476984168 VAT:FR79499450856 > >>>>> http://NeutronOptics.com/hewat <http://neutronoptics.com/hewat> > >>>>> _______________________________ > >>>>> > >>>>> -- > >>>>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >>>>> > >>>> > >>>> -- > >>>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >>>> > >>> > >>> > >>> -- > >>> *_______________________________* > >>> Dr Alan Hewat, NeutronOptics > >>> Grenoble, FRANCE (from computer) > >>> [email protected] > >>> +33.476984168 VAT:FR79499450856 > >>> http://NeutronOptics.com/hewat <http://neutronoptics.com/hewat> > >>> _______________________________ > >>> > >>> -- > >>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >>> > >> > >> -- > >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >> > > > > > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- *_______________________________* Dr Alan Hewat, NeutronOptics Grenoble, FRANCE (from computer) [email protected] +33.476984168 VAT:FR79499450856 http://NeutronOptics.com/hewat <http://neutronoptics.com/hewat> _______________________________ -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html
