Получение stdout при вызове Runtime.exec

Эта же функция есть в ссылке на Mako212, хотя я хочу дать некоторые пояснения, поскольку иногда я использую этот пакет, он может быть весьма полезен. Мы будем использовать функцию levenshteinSim() из пакета RecordLinkage.

Пакет:

install.packages("RecordLinkage")
library(RecordLinkage)

Найдите эти 90% совпадения:

data <- c("tcgartyu", "tcgart", "tckael", "tcgatcgatc", "tcgatcgatcg")
[1] "tcgartyu"   "tcgart"     "tckael"     "tcgatcgatc"   "tcgatcgatcg"

matches <- levenshteinSim('tcgatcgatcga', data)
[1] 0.42 0.42 0.25 0.83 0.92

matches_90 <- matches > 0.9
[1] FALSE FALSE FALSE FALSE  TRUE

Так что с помощью этой функции вы сможете получить строки, которые соответствуют 90% (или больше, как в моем примере). Затем вы можете использовать эти% совпадения так, как вы хотели.

Обратите внимание, что аргументы str1 и str2 из функции levenshteinSim() должны быть символьными векторами.

Для получения дополнительной информации посетите https://cran.r-project.org/package=RecordLinkage .

54
задан Allain Lalonde 19 May 2009 в 02:31
поделиться

5 ответов

Вам необходимо зафиксировать как std out, так и std err в процессе. Затем вы можете записать std в файл / почту или подобное.

См. эту статью для получения дополнительной информации и, в частности, обратите внимание на механизм StreamGobbler , который захватывает stdout / err отдельно потоки. Это важно для предотвращения блокировки и является источником множества ошибок, если вы не сделаете это правильно!

47
ответ дан 7 November 2019 в 08:04
поделиться

Используйте ProcessBuilder . После вызова start () вы получите объект Process , из которого вы можете получить потоки stderr и stdout.

ОБНОВЛЕНИЕ: ProcessBuilder дает вам больше контроля; Вам не обязательно использовать его, но я считаю, что в конечном итоге это проще. Особенно возможность перенаправить stderr на stdout, что означает, что вам нужно отсосать только один поток.

13
ответ дан 7 November 2019 в 08:04
поделиться

Runtime.exec () возвращает объект Process, из которого вы можете извлечь вывод любой выполненной команды.

2
ответ дан 7 November 2019 в 08:04
поделиться

Использование Runtime.exec дает вам процесс. Вы можете использовать getInputStream , чтобы получить стандартный вывод этого процесса, и поместить этот входной поток в String, например, через StringBuffer.

1
ответ дан 7 November 2019 в 08:04
поделиться

Use Plexus Utils, it is used by Maven to execut all external processes.

Commandline commandLine = new Commandline();
commandLine.setExecutable(executable.getAbsolutePath());

Collection<String> args = getArguments();

for (String arg : args) {
    Arg _arg = commandLine.createArg();
    _arg.setValue(arg);
}

WriterStreamConsumer systemOut = new WriterStreamConsumer(console);
WriterStreamConsumer systemErr = new WriterStreamConsumer(console);

returnCode = CommandLineUtils.executeCommandLine(commandLine, systemOut, systemErr, 10);
if (returnCode != 0) {
    // bad
} else {
    // good
}
7
ответ дан 7 November 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: