【问题标题】:C# - Process redirected output - Console different to CMD windowC# - 处理重定向输出 - 控制台不同于 CMD 窗口
【发布时间】:2010-10-25 10:46:36
【问题描述】:

我有一个带有 Process 的应用程序,它使用 cmd 程序。 Process 的输出是这样重定向的:

pr.StartInfo.RedirectStandardOutput = true;
pr.StartInfo.UseShellExecute = false;
pr.StartInfo.CreateNoWindow = true;                                         
pr.EnableRaisingEvents = true
pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);      
pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived); 

然后使用以下命令将输出写入控制台:

public void OnDataReceived(object sender, DataReceivedEventArgs e)
{
    if(e.Data != null)                                  
    {
        Console.WriteLine(e.Data);
    }
}

我的问题是 Visual Studio 打印输出,它与命令行输出非常不同。例如,我试图从输出中提取数据以查看已经完成了多少工作。我的应用程序输出:

0K ……………………………………………… .... 1% (null)
50K ……………………………………………… . 2% (null)
100K …………………………………………………… . 3% (null)
150K …………………………………………………………………………………………………………………………………… . 5%(空)

原始命令行程序输出(进度条和百分比随着时间的推移而累积):
100%[====================================]

这似乎没有什么大的区别,但对于我想要实现的目标而言。为什么 Visual Studio 输出与 CMD 输出不完全相同?

附言。两个示例中的参数相同。

【问题讨论】:

    标签: c# visual-studio command-line process command-prompt


    【解决方案1】:

    这是因为 wget 检测到您没有使用可见的控制台运行。您可以使用一些参数来改变这一点。

    具体原因是 wget 构建[==== 的方式是覆盖当前行。您通过重定向看到的输出可能是这样的:

      5% [=
     10% [==
     15% [===
     20% [====
    

    等等。全部换行。

    您可以通过将--progress=bar 添加到参数来强制此类反馈。

    【讨论】:

    • 这是 wput,不是 wget。不确定这有多大的不同。
    • wput 也应如此。您是否尝试过添加进度条参数?
    • 是的。不幸的是,wput 没有提供这个参数:
    • 嗯。真可惜。当应用程序试图变得聪明时令人恼火:)。
    【解决方案2】:

    控制台和文件是非常不同的。进度条清楚地使用了重定向时不存在的一些特殊的控制台特定功能(实际上是一个文件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多