Невозможно отправить более одной команды в консольное приложение - PullRequest
0 голосов
/ 14 марта 2012

У меня проблема при связи с консольным приложением с использованием класса Process.

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"consoleApp.exe";        
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
Process = Process.Start(psi);
Process.BeginOutputReadLine();

Мне нужно написать команды на консоли, получить ответы, ответить на них. Но команда, отправляемая на консоль, работает, только если я закрою поток:

Process.StandardInput.WriteLine("command");
Process.StandardInput.Close();

Почему это так? После этого, конечно, я не могу снова связаться с консольным приложением. Что я делаю неправильно? Как я могу нормально общаться с консольным приложением? Любая помощь очень ценится.

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Походит на скользкий уклон, я бы попытался подойти к нему по-другому, но если вы должны взаимодействовать таким образом, вы можете попробовать:

Process.StandardInput.Flush();

вместо Close ();только закройте () и утилизируйте все, как только вы закончите.

1 голос
/ 14 марта 2012

Используйте StreamWriter, как описано в:

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardinput.aspx

При создании двух консольных приложений, одно со следующим кодом:

class Program
{
    static void Main(string[] args)
    {
        var n = 0;
        while (n < 5)
        {
            var line = Console.ReadLine();
            Console.WriteLine("Read line {0}: {1}", n, line);
            n++;
        }
    }
}

И одно сследующее:

class Program
{
    static void Main(string[] args)
    {
        Process myProcess = new Process();

        myProcess.StartInfo.FileName = "ConsoleApplication1.exe";
        myProcess.StartInfo.UseShellExecute = false;
        myProcess.StartInfo.RedirectStandardInput = true;

        myProcess.Start();

        StreamWriter myStreamWriter = myProcess.StandardInput;

        var n = 0;
        while (n < 5)
        {
            myStreamWriter.WriteLine("line" + n.ToString());
            n++;
        }

        myStreamWriter.Close();
    }
}

Результат:

Read line 0: line0
Read line 1: line1
Read line 2: line2
Read line 3: line3
Read line 4: line4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...