我遇到控制台输出重定向问题(用C#编写)。 使用“cmd.exe”和任何参数(如“dir”)一切正常,但“gnatmake.exe”或“gcc.exe”没有!我没有看到输出,我给这些程序的命令不起作用(源代码不适合)!我曾经尝试过,没有争论 - 没有!
console = new Process();
// The path is correct, I've checked!
console.StartInfo.FileName = @"D:\MinGW\bin\gnatmake.exe";
// cmd.exe works perfectly!
//console.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
// gnatmake.exe isn't working even without arguments
console.StartInfo.Arguments = currFile;
console.StartInfo.UseShellExecute = false;
console.StartInfo.CreateNoWindow = true;
console.StartInfo.RedirectStandardOutput = true;
console.OutputDataReceived += new DataReceivedEventHandler(ConsoleOutputHandler);
console.Start();
console.BeginOutputReadLine();
void ConsoleOutputHandler(object sendingProcess, DataReceivedEventArgs recieved)
{
if (!string.IsNullOrWhiteSpace(recieved.Data))
{
MessageBox.Show(recieved.Data);
}
}
我尝试了别的东西:
console = new Process();
console.StartInfo.FileName = @"D:\MinGW\bin\gnatmake.exe";
console.StartInfo.UseShellExecute = false;
console.StartInfo.CreateNoWindow = true;
console.StartInfo.RedirectStandardOutput = true;
console.StartInfo.RedirectStandardInput = true;
console.Start();
StreamWriter sr = console.StandardInput;
sr.WriteLine(currFile);
sr.Close();
string str = console.StandardOutput.ReadToEnd();
console.WaitForExit();
MessageBox.Show(str);
仍然无法使用“gnatmake.exe”,但可以使用“cmd.exe”!
但后来我写了这个:
Process.Start(@"D:\MinGW\bin\gnatmake.exe", currFile);
并且它工作,编译文件但是使用此功能我无法输出! “gnatmake.exe”和“gcc.exe”有什么问题?怎么做得好? 谢谢你的回答!
答案 0 :(得分:0)
我做了这个工作!我为-eS
设置了参数gnatmake
,它在命令行(gnatmake.exe -eS hello.adb > test.txt
)中运行。
出于某种原因(谁可能告诉我为什么?)它在这段代码中没有用处:
console = new Process();
console.StartInfo.FileName = @"D:\MinGW\bin\gnatmake.exe";
console.StartInfo.UseShellExecute = false;
console.StartInfo.CreateNoWindow = false;
console.StartInfo.RedirectStandardOutput = true;
console.StartInfo.RedirectStandardInput = true;
console.Start();
StreamWriter sw = console.StandardInput;
sw.WriteLine("-eS " + currFile);
sw.Close();
string str = console.StandardOutput.ReadToEnd();
console.WaitForExit();
MessageBox.Show(str);
但它没有标准输入的重定向(可能输入根本不是标准输出,还有输出?):
console = new Process();
console.StartInfo.FileName = @"D:\MinGW\bin\gnatmake.exe";
console.StartInfo.Arguments = "-eS " + currFile;
console.StartInfo.UseShellExecute = false;
console.StartInfo.CreateNoWindow = false;
console.StartInfo.RedirectStandardOutput = true;
console.Start();
string str = console.StandardOutput.ReadToEnd();
console.WaitForExit();
MessageBox.Show(str);
所以,我至少对我的一个问题有答案。感谢Harry Johnston
回复!
更新:
我已经意识到,这段代码只给我gnatmake
的输出。 gnatmake
正在为其工作调用另一个程序。但我找到了一个简单的解决方案!
gnatmake hello.adb 2> test.txt
正在做我需要的事情。我可以从test.txt获得输出
我已经读过2>
正在输出stderr
。我试图在C#中输出错误信息,但我得到的只是gnatmake
个参数列表!我想我不想打扰它,从文件中读取文本对我来说已经足够了。