Есть ли пример разветвления и взаимодействия с подпроцессом в D?

#fork #pipe #d #popen

#fork #канал #d #popen

Вопрос:

Как вы разветвляете и взаимодействуете с подпроцессом в D?

Я думаю, что я в значительной степени ищу http://erdani.com/d/new-stdio/phobos-prerelease/std_process.html#pipeProcess но pipeProcess, похоже, не находится в D2.

Я хочу запустить дочерний процесс и иметь возможность считывать из его stdout и stderr, записывать в его stdin и получать уведомления о его выходе и его коде выхода.

Каков наилучший способ сделать это в D?

Спасибо,

Крис.

Комментарии:

1. Я полагаю, что эта документация была опубликована для обсуждения предлагаемых изменений в std.stdio, а ее страница в std.process, вероятно, предназначена для того, что в конечном итоге станет новым std.process (поскольку разработчик, который предлагал изменения в std.stdio, участвует в переписывании std.process),но в среде выполнения C Digital Mars есть ошибка, из-за которой новый std.process пока не работает в Windows (и это, вероятно, повлияет на это, поскольку это связано с каналами). Однако в конечном итоге он должен оказаться в Phobos в той или иной форме.

2. Спасибо, это здорово знать. Мой энтузиазм в отношении D во многом основан на том, насколько просто полезные вещи могут быть написаны кроссплатформенным способом.

Ответ №1:

В конечном итоге эта функциональность будет в Phobos, но пока вот класс, который я собрал вместе: Pastebin link

Вы используете это так:

 auto stream = new ProcessStream("ls -a");
// read, write, etc. from stream
 

Ответ №2:

В настоящее время так же, как и в C. pipe, fork, exec.

Не очень.