繁体   English   中英

C#过程中的标准输入/输出

[英]Standard input/output in C# process

我的应用程序App正在使用其他我的应用程序SubApp App需要SubApp它正在使用SubApp创建进程,将数据放入SubApp stdin并从SubApp stdout读取。

问题是SubApp正在使用一些有时写入stdout库。

SubApp代码的片段:

OutsideLibrary.DoSomeInitialization();  // <-- this sometimes writes to stdout
Stream input = Console.OpenStandardInput();
Stream output = Console.OpenStandardOutput();
data = (dataFormat)formatter.Deserialize(input);
//do some job
formatter.Serialize(output, result);

有没有办法防止我写入stdout时没有的代码?

假设您要禁用第三方组件输出并且您可以控制其余的SubApp代码,您可以执行以下操作:在应用程序引导时将标准输出重定向为null。 当你需要写一些东西到stdout临时设置标准输出恢复正常时,再次写入并设置为null。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace stdio
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.SetOut(System.IO.TextWriter.Null);
            Console.WriteLine("This will go to > null");
            WriteOutput("This is written to standard output");
            Console.WriteLine("This will also go to > null");
            Console.ReadKey();
        }

        static void WriteOutput(String someString)
        {
            Console.SetOut(Console.Out);
            Stream output = Console.OpenStandardOutput();
            StreamWriter sw = new StreamWriter(output);
            sw.Write(someString);
            sw.Flush();
            sw.Close();
            output.Close();
            Console.SetOut(System.IO.TextWriter.Null);
        }



    }
}

我试过这个:

StreamWriter sw = new StreamWriter(@"c:\nul");
Console.SetOut(sw);
Console.WriteLine("hello!");

但它在新的StreamWriter()中引发异常。

以下可能有效(在外部模块变为活动状态之前调用它):

StreamWriter sw = new StreamWriter(Stream.Null);
Console.SetOut(sw);

解决方法是打开一个真实的文本文件并将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM