有没有办法让现有的cmd窗口执行命令?

时间:2014-02-21 01:05:17

标签: windows matlab terminal cmd

所以这是我的故事。

我正在使用Windows操作系统。我正在运行一个Matlab GUI,在启动时启动另一个可执行文件。另一个可执行文件以批处理模式运行(在后台运行cmd。)

我想这样做,当用户点击Matlab GUI上的按钮时,另一个可执行文件将运行命令并保持打开状态。这可能吗?

注意:我不想打开新的cmd窗口,我希望现有的窗口执行命令。

2 个答案:

答案 0 :(得分:4)

不幸的是,Matlab似乎没有你想要的能力,至少不是直接的。我发现了一篇文章,它解释了如何在.NET的帮助下解决这个问题,这很幸运,因为你在Windows平台上:http://www.mathworks.com/matlabcentral/answers/72356-using-matlab-to-send-strings-to-the-stdin-of-another-console-application

我从那篇帖子中复制了很多这个

function lh = task()
  % Initialize the process and its StartInfo properties.
  % The sort command is a console application that
  % reads and sorts text input.
  process = System.Diagnostics.Process;
  process.StartInfo.FileName = 'sort.exe';
  process.EnableRaisingEvents = true;
  process.StartInfo.CreateNoWindow = true;
  % Set UseShellExecute to false for redirection.
  process.StartInfo.UseShellExecute = false;
  %Redirect the standard output of the sort command.
  process.StartInfo.RedirectStandardOutput = true;
  % Set our event handler to asynchronously read the sort output.
  lh = process.addlistener('OutputDataReceived',@sortOutputHandler);
  % Redirect standard input as well.  This stream
  % is used synchronously.
  process.StartInfo.RedirectStandardInput =true;
  % Start the process.
  process.Start();
  %Use a stream writer to synchronously write the sort input.
  ProcessStreamWriter = process.StandardInput;
  % Start the asynchronous read of the sort output stream.
  process.BeginOutputReadLine();
  %Prompt the user for 4 input text lines.  Write each
  %line to the redirected input stream of the sort command.
  numInputLines = 0;
   while(numInputLines ~= 4)
      inputText = input('Enter a text line (or press the Enter key to stop):', 's');
      numInputLines = numInputLines + 1;
      if(~isempty(inputText))
          ProcessStreamWriter.WriteLine(inputText);
      end
  end
  disp('end of input stream');
  %end the inputr stream to the sort command
  ProcessStreamWriter.Close();
  % wait for the sort process to write the sorted text lines
  process.WaitForExit();
  process.Close();
end

要处理CMD的任何输出,您需要:

function processOutputHandler(obj,event)
 %collect the sort command output and print in command window
 if(~isempty(event.Data)) 
     disp(event.Data);
 end
end

您可以使用流编写器同步写入排序输入。

processStreamWriter = process.StandardInput;

同样,我从前面提到的帖子中得到了这个,所以我不能对代码有任何赞誉,但我确实认为它能够完成你想要的东西。不幸的是,我很确定这将完成你所需要的。我目前在Windows平台上没有Matlab,或者我会对此进行测试。如果您需要有关在MATLAB中使用.NET代码的信息(如果您需要添加一些东西来建立.NET接口,则不能立即清楚)MathWorks提供了一些文档:http://www.mathworks.com/help/matlab/matlab_external/using-net-from-matlab-an-overview.html

希望这会有所帮助,或者让你开始。如果我错过了其他任何内容,请告诉我。

答案 1 :(得分:0)

您可以从ansys方面处理此问题。用 -B-R 启动它来读取python脚本。

从那里,您可以建立一些双向协议,例如轮询文件,或者更好的方法是从python运行Web服务器。

然后,您可以从matlab与正在运行的ansys实例进行通信。如果您选择Web服务器,则使用MATLABs urlread()。

使用python设置Web服务器很简单,但您必须学习如何将命令分派给托管ansys应用程序。