【问题标题】:c# console: how can i read piped input from the command linec#控制台:如何从命令行读取管道输入
【发布时间】:2014-12-19 11:24:52
【问题描述】:

我有点困惑。我一直在查看上述问题的先前答案,但没有一个对我真正有用,所以我不确定我做错了什么。

我有一个简单的 c# 控制台应用程序:(outputsomething.exe)

static void Main(string[] args) {
    Console.Out.Write("This is a test");
}

另一个从上面的代码中获取一些参数和管道输入,如下所示: dostuffwithinput.exe 一些参数 |outputsomething.exe

第一个问题是我无法弄清楚如何“读取”管道输入,正如我在上面所说的那样,现有的答案都不适合我,从 stdin (Console.In) 读取只是没有捕获任何内容。

其次,在输入某些内容后,我无法再将任何内容写入 stdout (Console.Out)。

我的代码非常简单,它只是将 args 连同一些控制台属性一起写到一个文件中,并尝试从 Console.In 中读取 - 它确实如此,但它只读取我输入的输入。

但是对于管道输入,它永远无法捕获管道输入的内容,并且最后的输出永远不会发送到控制台。

    static void Main(string[] args) {
        bool ior = Console.IsInputRedirected;
        bool keyavail = Console.KeyAvailable;

        char[] chrs = new char[4];
        int chr = Console.In.ReadBlock(chrs, 0, 4);

        using (StreamWriter stream = new StreamWriter("fred.txt")) {
            foreach (var arg in args) {
                stream.WriteLine(arg);
                Console.WriteLine(arg);
            }
            stream.WriteLine("input = " + new string(chrs));
            stream.WriteLine("io redirectirected = " + ior);
            stream.WriteLine("is key available = " + keyavail);
        }
        Console.WriteLine("fin");
        Console.Out.Flush();
    }

(我也遇到了这个一堆废话编辑器的严重问题,它一直显示关于缩进的红色警告,我必须删除很多示例才能以可发送的形式获得它!)

我做错了什么? (这是在 Windows 10/9879 上)

TIA

【问题讨论】:

    标签: c# windows


    【解决方案1】:

    对以下示例代码进行了相同的尝试。它对我有用。

    写文本

    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Test Line1");
                Console.WriteLine("test Line2");
            }
        }
    

    流程输入

    class Program
        {
            static void Main(string[] args)
            {
                string s=Console.In.ReadToEnd();
    
                Console.WriteLine("Redirected Text: " + s);
    
            }
        }
    

    我使用 WriteText.exe | 调用了该应用程序进程输入程序 它显示了由 WriteText.exe 准确传递的输出字符串

    如果有帮助,请告诉我。

    【讨论】:

      【解决方案2】:

      如果你想从outputsomething.exe 管道到dostuffwithinput.exe 它应该是

      outputsomething.exe|dostuffwithinput.exe some args
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2020-06-05
      • 1970-01-01
      • 2011-11-08
      相关资源
      最近更新 更多