Я использую следующий кодПеренаправление стаут от дочернего процесса с .net
System::Diagnostics::Process^ p = gcnew System::Diagnostics::Process();
p->StartInfo->FileName = "tnccmd.exe";
p->StartInfo->UseShellExecute = false;
p->StartInfo->RedirectStandardInput = true;
p->StartInfo->RedirectStandardOutput = true;
p->Start();
System::IO::StreamWriter^ tnc_stdin = p->StandardInput;
System::IO::StreamReader^ tnc_stdout = p->StandardOutput;
tnc_stdin->WriteLine("connect i 127.0.0.1");
String^ prg_output = tnc_stdout->ReadToEnd();
Моя проблема заключается в том, что я не могу читать stdout
правильно. Я могу легко написать stdin
, но теперь я пытаюсь реализовать некоторый код проверки ошибок, и он не работает.
Программа, которую я использую, кажется, не пишет stdout
, даже если она выполнена для запуска в командной строке. Я могу воспроизвести bug
с ftp.exe
, который поставляется с Windows XP
по умолчанию. Если вы меняете ->FileName
с ftp.exe
, то командная строка ftp.exe
обычно дает ftp>
не отображается в prg_output
.
Теперь я знаю, что приглашение должно использовать какой-то windows shell curses
, и я могу смешивать проблемы.
Нормальный сразу после инструкции connect i 127.0.0.1
Предполагается, что я получил connecting to 127.0.0.1...
, но ничего не получаю.
Любой намек на то, что я делаю неправильно? Есть ли еще один вид stdout
, о котором я не знаю?
EDIT
Я не могу использовать аргументы, потому что у меня есть несколько строк, чтобы написать, так же, как с ftp.exe
. Кроме того, ftp.exe
выводит, когда вы вводите команды, такие как каталог. По крайней мере, он выводится, когда вы пишете неизвестные команды, он жалуется на Invalid command
.
Благодарим за ответ. Однако StreamWriter действительно работает, проблема возникает с StreamReader – Eric 2008-11-25 21:44:33