Как читать и писать в cmd с помощью boost::processC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как читать и писать в cmd с помощью boost::process

Сообщение Anonymous »

Я пытаюсь создать простое приложение, которое будет открывать cmd и записывать команды в cmd одну за другой. и прочитайте вывод один за другим. Я не хочу запускать отдельный cmd для каждой команды. потому что некоторым командам требовалось, чтобы предыдущие команды запускались уже в том же cmd. например установка переменных env.
Я не хочу иметь дело с API ядра Windows, например CreateProcessA. Я выбрал boost.process, надеясь, что это будет просто. Я также новичок в Boost и не смог решить эту проблему.
Я использую код ниже,

Код: Выделить всё

asio::io_context ctx;
asio::writable_pipe wp{ ctx };
asio::readable_pipe rp{ ctx };
asio::readable_pipe erp{ ctx };

process proc(
ctx,
"C:\\Windows\\System32\\cmd.exe",
{},
bp::process_stdio{ wp, rp, erp }
);
std::string output;
boost::system::error_code ec;
asio::write(wp, asio::buffer("echo Hello from CMD\n"));
boost::asio::read(rp, asio::dynamic_buffer(output),boost::asio::transfer_all());
но зависает на последней строке asio::read. кажется, он постоянно прослушивает вывод.
Я пробовал код ниже,

Код: Выделить всё

 for (;;)
{
char buf[1024];
std::size_t n = rp.read_some(asio::buffer(buf), ec);

if (ec == asio::error::eof)
break;

if (ec)
throw boost::system::system_error(ec);

std::cout.write(buf, n);
}
опять зависает как read_some . Можно ли как-то с этим справиться? Или мне следует использовать многопоточность, один поток будет писать, а другой читать? Кажется, сложность такая же, как и у CreateProcess().

Подробнее здесь: https://stackoverflow.com/questions/798 ... ostprocess
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»