控制台输出重定向问题

时间:2015-02-28 19:45:22

标签: c# windows gcc gnat

我遇到控制台输出重定向问题(用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”有什么问题?怎么做得好? 谢谢你的回答!

1 个答案:

答案 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个参数列表!我想我不想打扰它,从文件中读取文本对我来说已经足够了。