所以這裏是我的情況。有沒有辦法讓現有的cmd窗口執行命令?
我正在使用Windows操作系統。我正在運行一個Matlab GUI,在啓動時啓動另一個可執行文件。另一個可執行文件以批處理模式運行(在後臺運行cmd)。
我想這樣做,當用戶單擊Matlab GUI上的按鈕時,其他可執行文件將運行一個命令並保持打開狀態。這可能嗎?
注意:我不想打開一個新的cmd窗口,我希望現有的窗口執行命令。
所以這裏是我的情況。有沒有辦法讓現有的cmd窗口執行命令?
我正在使用Windows操作系統。我正在運行一個Matlab GUI,在啓動時啓動另一個可執行文件。另一個可執行文件以批處理模式運行(在後臺運行cmd)。
我想這樣做,當用戶單擊Matlab GUI上的按鈕時,其他可執行文件將運行一個命令並保持打開狀態。這可能嗎?
注意:我不想打開一個新的cmd窗口,我希望現有的窗口執行命令。
不幸的是,似乎沒有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
希望這可以幫助您,或者讓您開始。讓我知道是否還有其他東西我錯過了。
您可以從ansys方面處理此問題。從-B-R開始閱讀python腳本。
從那裏,你可以建立一些雙向協議,例如輪詢文件,或者更好地,通過從python運行一個web服務器。
然後,您可以從matlab與ansys的運行實例進行通信。如果你選擇一個Web服務器,你可以使用MATLAB的urlread()。
使用python設置web服務器很容易,但是您必須學習如何將命令發送到託管ansys應用程序。
你爲此嘗試了什麼?首先想到的是將數據發送到您啓動的bash可執行文件的標準輸入。 – Jared
我應該注意到,在後臺運行的可執行文件不會在任何時候引起注意。因此,使用bash exe的標準輸入是不可能的,因爲用戶不會知道要輸入的命令。 – user3335078
不能將標準輸入重定向到不同的流? – Jared