Copy Matlab Command Window without diary
    36 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Fabio Freschi
      
 il 10 Giu 2020
  
    
    
    
    
    Commentato: Mario Malic
      
 il 8 Dic 2020
            Hi everyone,
I would like to add an optional function command at the end of a script that logs the command window to a file.
I know that diary gets the job done, but diary must be activated at the beginning of the execution, and this is not always possible.
I also know that the diary command can be put in the startup.m file so that it is automatically started with the Matlab session, but also this option is not always a feasible solution (I don't have control of the computer where the code is run).
There can be also many other objections for my intention to not using diary, but let's assume that I am at least curious: is it possible to mimic the "select all"+"copy" sequence to get all the text that is available in the command window at a specific moment? the output can be stored in a variable or file, it is not important.
Thank you for your help
Fabio
2 Commenti
Risposta accettata
  Mario Malic
      
 il 7 Dic 2020
        Hi Fabio,
I Hope that you have solved your problem already, in case if someone else might be interested in this, here's the solution.
After a bit of digging around, I managed to find a way to get the text from the command window programatically
desktop = com.mathworks.mde.desk.MLDesktop.getInstance;
cmdWindow = desktop.getClient('Command Window');
cmdWindowScrollPane = cmdWindow.getComponent(0);
cmdWindowScrollPaneViewport = cmdWindowScrollPane.getComponent(0);
cmdTextUI = cmdWindowScrollPaneViewport.getComponent(0);
cmdText = cmdTextUI.getText;
4 Commenti
Più risposte (1)
  Steven Lord
    
      
 il 10 Giu 2020
        I don't think there's a way to programmatically get access to the scroll buffer of the Command Window after-the-fact. You could try "clicking" and "typing" Ctrl-A and Ctrl-C in the Command Window using java.awt.Robot then use the clipboard function to paste that into a variable, but I'm not sure how practical that would be for your application.
If you can control how MATLAB gets launched, however, you could add the -logfile startup option to that command. This wouldn't require changing any files (like startup.m.)
You could capture everything under your control except the first line by calling diary as the first line in the initial function that gets called to start your analysis.
If you don't need to see the output as the code runs and you're using it only to capture that output into a variable (you're not trying to create dynamically named variables or the like) you could use evalc. But again, that's not an after-the-fact thing; you'd have to wrap your code (say the main function call) in evalc before or as you start running it.
Vedere anche
Categorie
				Scopri di più su Startup and Shutdown in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!