developer's diary

最近はc#のエントリが多いです

C# (dotnetcore)で標準出力と標準エラー出力 (c#でもUNIX文化のパイプを利用したい)

プロセス間通信の一つである、パイプを利用する方法(標準入力)をC#で前回やりました。

mitsugeek.net

今回は、標準出力、標準エラー出力についてのエントリです。

標準出力

はい。Visual Studio 2019 for Macでコンソールアプリを新規作成した際の状態が、 もうすでに標準出力です。

using System;

namespace example_stdout
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Console.Writeや、Console.WriteLineもあります。

Console.WriteLineとConsole.Out.WriteLineは同じ。

Console.WriteLineは内部で、Console.Out.WriteLineを呼んでいるだけのようです。

f:id:mitsugi-bb:20200822063731p:plain
Console.WriteLineはConsole.Out.WriteLineを呼んでいる

リファレンス実装は下記リンクに https://referencesource.microsoft.com/#mscorlib/system/console.cs,5ac7c4fda643413b,references

Documentは下記リンクに docs.microsoft.com

標準エラー出力

標準エラー出力はConsole.Errorプロパティを利用しましょう。

using System;

namespace example_stderr
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Error.WriteLine("Hello World!");
        }
    }
}

これもすごく簡単!

Documentは下記リンクに docs.microsoft.com

色を変えてみよう

BackgroundColorと、ForegroundColorを設定するだけ。 表示色を元に戻す場合は、ResetColorメソッドを利用する。

using System;

namespace example_stderr
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.BackgroundColor = ConsoleColor.Green;
            Console.ForegroundColor = ConsoleColor.White;
            Console.Error.WriteLine("標準エラー出力");
            Console.ResetColor();


            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            Console.Out.WriteLine("標準出力");
            Console.ResetColor();
        }
    }
}

結果

f:id:mitsugi-bb:20200822065735p:plain
BackgroundColorとForegroundColorを設定

Consoleでも実行

f:id:mitsugi-bb:20200822070142p:plain
ConsoleでもBackgroundColorとForegroundColorを確認

ConsoleColorは16色

docs.microsoft.com

リファレンス実装はこちら

https://referencesource.microsoft.com/#mscorlib/system/consolecolor.cs,9fafce1e8582bc16

f:id:mitsugi-bb:20200822070611p:plain
ConsoleColorのEnum

/dev/nullへのリダイレクト(出力結果を捨てる)で、それぞれ出力されている内容を確認

f:id:mitsugi-bb:20200822071025p:plain
/dev/nullへのリダイレクトでそれぞれ確認