【问题标题】:c# Process output unreadable pckimmoc#进程输出不可读的pckimmo
【发布时间】:2016-12-07 07:38:58
【问题描述】:

我一直在尝试读取进程输出以进行形态分析。但我无法读取 pckimmo32.exe 输出。

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

【问题讨论】:

  • pckimmo.exe 已使用错误输出进行输出。我可以用 errorinput 读取输出。 (RedirectStandardError , ErrorDataReceived, BeginErrorReadLine)

标签: c# process output


【解决方案1】:

类似这样的:

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;
}

【讨论】:

  • 我还没有读取 pckimmo.exe 的输出。你可以得到结果输出吗?
  • 如果进程 pckimmo.exe 写入标准输出,这将作为字符串返回。
  • 我不知道 pckimmo 内部进程,但我在文件运行时看到命令输出。我的 Problem2 方法是读取标准输出响应。有没有看github project这个案例?
  • 我在 GitHub 上阅读了该项目,但不幸的是我现在没有时间下载/运行它。
  • 我认为您确实走在正确的轨道上。它正在找出两个 .exe 进程之间的区别,为什么一个提供输出而另一个不提供。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2014-02-15
  • 2012-09-03
相关资源
最近更新 更多