如何在启动进程之前重定向STDIN .NET进程

时间:2015-02-11 17:32:16

标签: c# .net stdin pos-tagger

我试图制作使用hunpos tagger的C#应用​​程序。 运行hunpos-tag.exe需要三个输入参数:model,inputFile,outputFile

在cmd中它看起来像这样:

hunpos-tag.exe model <inputFile >outputFile

如果我只是用模型运行它会写一些东西然后等待结束命令。当我尝试使用标准重定向时,我得到一个异常(我解决了这个代码被一个支架关闭了我现在刚刚获得或者方案)或者我得到了运行带有模型参数的标记器的结果。这是代码:

string inputFilePath =  path + "\\CopyFolder\\rr";
string pathToExe = path + "\\CopyFolder\\hunpos-tag.exe";

ProcessStartInfo startInfo = new ProcessStartInfo
    {
         FileName = pathToExe,
         UseShellExecute = false,
         RedirectStandardInput = true,
         WorkingDirectory = Directory.GetDirectoryRoot(pathToExe),
         Arguments = path + "\\CopyFolder\\model.hunpos.mte5.defnpout",
    };

try
{
    Process _proc = new Process();
    _proc.StartInfo.FileName = pathToExe;
    _proc.StartInfo.UseShellExecute = false;
    _proc.StartInfo.RedirectStandardInput = true;
    _proc.StartInfo.Arguments = path + "\\CopyFolder\\model.hunpos.mte5.defnpout";
    //Magic goes here
    _proc.Start();

    _proc.WaitForExit();
}
catch (Exception e)
{
    Console.WriteLine(e);
}

任何想法如何在开始我的流程之前重定向输入?

2 个答案:

答案 0 :(得分:0)

不仅需要将RedirectStandardInput设置为true,还需要使用输入流来编写所需的文本:

_proc.StandardInput.WriteLine("The text you want to write");

答案 1 :(得分:0)

如果您稍后设置信息,则不需要ProcessStartInfo。摆脱它。似乎你已经做了你想做的事。只是创建流程对象不会启动流程,Process.Start会这样做。只需创建一个新的StreamWriter并将其传递给Process.StandardInput(我认为这是对的,它可能是其他的东西)