2014-02-21 183 views
2

所以這裏是我的情況。有沒有辦法讓現有的cmd窗口執行命令?

我正在使用Windows操作系統。我正在運行一個Matlab GUI,在啓動時啓動另一個可執行文件。另一個可執行文件以批處理模式運行(在後臺運行cmd)。

我想這樣做,當用戶單擊Matlab GUI上的按鈕時,其他可執行文件將運行一個命令並保持打開狀態。這可能嗎?

注意:我不想打開一個新的cmd窗口,我希望現有的窗口執行命令。

+0

你爲此嘗試了什麼?首先想到的是將數據發送到您啓動的bash可執行文件的標準輸入。 – Jared

+0

我應該注意到,在後臺運行的可執行文件不會在任何時候引起注意。因此,使用bash exe的標準輸入是不可能的,因爲用戶不會知道要輸入的命令。 – user3335078

+0

不能將標準輸入重定向到不同的流? – Jared

回答

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

希望這可以幫助您,或者讓您開始。讓我知道是否還有其他東西我錯過了。

0

您可以從ansys方面處理此問題。從-B-R開始閱讀python腳本。

從那裏,你可以建立一些雙向協議,例如輪詢文件,或者更好地,通過從python運行一個web服務器。

然後,您可以從matlab與ansys的運行實例進行通信。如果你選擇一個Web服務器,你可以使用MATLAB的urlread()。

使用python設置web服務器很容易,但是您必須學習如何將命令發送到託管ansys應用程序。

相關問題