How to redirect standard input and standard output using .Net System.Diagnostics.Process
32 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Michael Maurice
am 31 Aug. 2020
Kommentiert: Mohammad Sami
am 2 Sep. 2020
I'm working on some optimisation code and have recently moved away from using the system() function to open xfoil.exe and direct input and output files,
cmd = sprintf('cd %s && xfoil.exe < xfoil.inp > xfoil.out &',working_directory);
[status,result] = system(cmd);
and I am now attempting to complete the same operations using:
process = System.Diagnostics.Process();
process.StartInfo.FileName = 'xfoil.exe';
process.StartInfo.Arguments = %not sure what to put here%;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = false;
process.Start();
I'm not very experienced with coding in general, so I'm struggling a bit here, but I really need some help to figure out how to redirect standard input and standard output to my two files (xfoil.inp and xfoil.out) using .Net System.Diagnostics.Process.
1 Kommentar
Akzeptierte Antwort
Mohammad Sami
am 31 Aug. 2020
You can try this. You may have to choose the option on how to decide when xfoil.exe has finished reading.
process = System.Diagnostics.Process();
process.StartInfo.FileName = 'xfoil.exe';
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = false;
process.Start();
stdin = process.StandardInput;
stdout = process.StandardOutput;
fid = fopen('xfoil.inp','r'); % read the xfoil.inp
txt = fread(fid,'*char');
fclose(fid);
stdin.Write(txt); % send the input to xfoil.exe
out = stdout.ReadToEndAsync;
% wait for xfoil.exe to finish processing
% option 1
pause(1); % pause for a predefined amount of time
% option 2
% wait until xfoil.exe has terminated
while(~process.HasExited)
pause(1);
end
try
process.Kill; % kill the process if needed.
catch
end
xfoil_out = char(out.Result);
10 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Gas Dynamics finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!