2016-12-07 56 views
0

我一直在嘗試讀取解析形態分析的過程輸出。但我無法讀取pckimmo32.exe輸出。c#進程輸出不可讀pckimmo

public static string Problem1() 
{ 
    ProcessStartInfo _startInfo = new ProcessStartInfo(); 
    Process p = new Process(); 
    StringBuilder outputStringBuilder = new StringBuilder(); 
    string filePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\PC-KIMMO\pckimmo32.exe"; 
    var file = new FileInfo(filePath); 

    p.StartInfo = _startInfo; 
    _startInfo.UseShellExecute = false; 
    _startInfo.RedirectStandardOutput = true; 
    _startInfo.RedirectStandardInput = true; 
    _startInfo.WorkingDirectory = file.Directory.FullName; 
    _startInfo.FileName = file.FullName; 
    p.OutputDataReceived += (sender, eventArgs) => outputStringBuilder.AppendLine(eventArgs.Data); 
    p.Start(); 
    p.BeginOutputReadLine(); 
    var myWriter = p.StandardInput; 
    myWriter.AutoFlush = true; 
    myWriter.WriteLine("synthesize kitap +Noun +A3sg +P2sg +Loc"); 
    myWriter.Close(); 

    p.WaitForExit(); 
    var output = outputStringBuilder.ToString(); 

    return output; 
} 

public static void Display(DataReceivedEventArgs nes) 
{ 
    Console.WriteLine(nes.Data); 
} 

我可以讀取另一個文本exe文件輸出。

public static string Problem2() 
{ 
    ProcessStartInfo _startInfo = new ProcessStartInfo(); 
    Process p = new Process(); 
    StringBuilder outputStringBuilder = new StringBuilder(); 
    string filePath = AppDomain.CurrentDomain.BaseDirectory + @"..\..\..\RTest\bin\debug\RTest.exe"; 
    var file = new FileInfo(filePath); 

    p.StartInfo = _startInfo; 
    _startInfo.UseShellExecute = false; 
    _startInfo.RedirectStandardOutput = true; 
    _startInfo.RedirectStandardInput = true; 
    _startInfo.WorkingDirectory = file.Directory.FullName; 
    _startInfo.FileName = file.FullName; 
    p.OutputDataReceived += (sender, eventArgs) => outputStringBuilder.AppendLine(eventArgs.Data); 
    p.Start(); 
    p.BeginOutputReadLine(); 
    var myWriter = p.StandardInput; 
    myWriter.AutoFlush = true; 
    myWriter.Close(); 

    p.WaitForExit(); 
    var output = outputStringBuilder.ToString(); 

    return output; 
} 

Problem2方法是成功讀取輸出,我想讀輸出Problem1方法。

我相信我在正確的軌道上,但只需要幾個指針。

Test project on the github

+0

pckimmo.exe一直使用錯誤輸出輸出。我可以用errorinput讀取輸出。 (RedirectStandardError,ErrorDataReceived,BeginErrorReadLine) –

回答

0

事情是這樣的:

private string ReadProcessOutput(string fileName, TimeSpan waitTime, string args, string commandToEnter) // Command to enter in input window. 
{ 
    Console.WriteLine("Starting process: {0}", fileName); 

    Process proc = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = fileName, 
      Arguments = args, 
      UseShellExecute = false, 
      RedirectStandardOutput = true, 
      RedirectStandardInput = true, 
      CreateNoWindow = true 
     } 
    }; 

    proc.Start(); 

    proc.StandardInput.WriteLine(commandToEnter); 
    proc.WaitForExit((int)waitTime.TotalMilliseconds); 

    if (proc.HasExited) 
    { 
     Console.WriteLine("Process {0} exited with code {1}", fileName, proc.ExitCode); 
     string output = proc.StandardOutput.ReadToEnd(); 
     Console.WriteLine("Process output: " + Environment.NewLine + output); 

     return output; 
    } 

    return null; 
} 
+0

我還沒有讀過pckimmo.exe輸出。你可能會得到結果輸出? –

+0

如果進程pckimmo.exe寫入標準輸出,這將以字符串形式返回。 –

+0

我不知道pckimmo內部進程,但是當文件運行時我看到命令輸出。我的Problem2方法是讀取標準輸出響應。你看過github項目這個案例嗎? –