#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.
Не очень.