OutputDataReceived不等于cmd输出。为什么?

时间:2017-03-21 16:19:01

标签: c# cmd redirectstandardoutput

我以这种方式创建流程:

Process process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "cmd",
                Arguments = "/C tools\\adb " + serial + command,
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
            }
        };
        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();

然后我订阅了这个活动:

process.OutputDataReceived += Display;

我将数据附加到StringBuilder:

builder.AppendLine(e.Data);

最后,我将StringBuilder文本附加到RichTextBox。

rtb_console.AppendText(builder.ToString());

问题是,我得到的输出不等于我用cmd获得的输出。

E.g。

CMD(正确):

Line 1 text text text text
Line 2 text text text text
Line 3 text text text text

使用C#(错误):

Line 1 text text text text

Line 2 text text text text

Line 3 text text text text

执行

时,输出错误
adb logcat -d > output.txt

如果我使用StandardOutput.ReadToEnd(),问题就不会发生,但是我不会得到实时输出。

我找不到问题。你能救我吗?

此致

1 个答案:

答案 0 :(得分:-2)

好吧,最后我找到了答案。

关键是,使用没有pty的shell命令。 Pty破坏了二进制输出。

而不是

adb shell ls

使用

adb exec-out ls

更多信息:

Read binary stdout data from adb shell?

https://android.googlesource.com/platform/system/core/+/5d9d434efadf1c535c7fea634d5306e18c68ef1f

Transferring binary data over ADB shell (ie fast file transfer using tar)