2016-12-07 5 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のこの案件のプロジェクトを見ましたか? –

関連する問題