Подпроцесс порождения в R - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь порождать подпроцесс в R, используя библиотеку подпроцессов, как показано в этом руководстве.Проблема в том, что программе, которую я пытаюсь запустить, требуется дополнительная команда после исполняемого файла.

Пример:

Я бы запустил команду из оболочки следующим образом:

monetdbd create mydb

где 'create' - дополнительная команда, а 'mydb' - параметр.

Я попытался указать 'create mydb' в качестве параметров в R следующим образом:

handle <- spawn_process('/usr/local/bin/monetdb', c('create mydb'))

Однако извывод, который я получил с помощью

process_read(handle, PIPE_STDOUT, timeout = 3000)

Я пришел к выводу, что параметры не работают, так как я получаю информационное сообщение от monetdb о том, как его вызвать, точно так же, как если бы я вызывал только 'monetdb' безКоманда create из оболочки:

Usage: monetdb [options] command [command-options-and-arguments]

Второе, что я попробовал, это включить команду create в путь, но это приводит к ошибке «Нет таких файлов и каталогов».

Любые советы приветствуются.

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Не зная ничего о пакете, который вы используете, и просто руководствуясь документацией , я думаю, вам нужно разделить аргументы командной строки, которые вы передаете функциям:

handle <- spawn_process('/usr/local/bin/monetdb', c('create',  'mydb'))

Это также следует за «обычным» API функций spawn / fork / exec.

Кроме того, использование c(…) (почти) необходимо только при создании вектора из нескольких элементов. В вашем коде (и в учебнике) не нужно вокруг одной строки символов.

Более того, вопреки утверждениям руководства, эта функциональность уже встроена в R с помощью функций system2 и pipe (хотя я не сомневаюсь, что пакет подпроцесса более полон, и, вероятно, проще использовать).

Но если вашей конечной целью является использование MonetDB в R, то вам, вероятно, лучше посоветовать следовать другому ответу и использовать выделенные привязки MonetDB R, а не взаимодействовать с двоичным файлом демона посредством связи подпроцесса.

0 голосов
/ 18 июля 2019

MonetDB - это демон-процесс для MonetDB, имеющий мало общего с (теперь уже старой) версией MonetDBlite, используемой в R. Последняя из списана с CRAN, а более новая версия MonetDBlite ожидается в начале следующего года.

...