Комментарии 10
Но в итоге же просто вышел запуск процесса питона из котлина, что ничем не отличается от запуска любого друого процесса, и, в целом, не тянет на "заставил Kotlin взаимодействовать с Python". Два первых варианта (Jython и клиент-сервер) позволили бы организовать какое-то нетрививальное взаимодействие на уровне вызовов функций, а вышло примитивнее некуда.
И еще, не знаю, как сейчас, но раньше на винде этот код зависал бы в тех случаях, когда питон заполнил свой буфер stderr, пока котлин ждал и читал stdout.
PS. Что характерно, в питоне запуск процесса и чтение его stdout/stderr делается в одну-две строчки, а тут целая статья вышла.
Да тут тоже недолго
val process = ProcessBuilder(script, title, summary).start()
val output: String
val errors: String
val returnCode: Int
coroutineScope {
val outputResult = async(Dispatchers.IO) { process.inputReader().readText() }
val errorsResult = async(Dispatchers.IO) { process.errorReader().readText() }
returnCode = process.waitFor()
output = outputResult.await()
errors = errorsResult.await()
}
Это с учётом что запускаемый процесс может писать в stdout и stderr параллельно.
И еще, не знаю, как сейчас, но раньше на винде этот код зависал бы в тех
случаях, когда питон заполнил свой буфер stderr, пока котлин ждал и
читал stdout.
Не только на винде. Приходилось в двух разных проектах это фиксить: один на windows server , а другой на CentOS, если не ошибаюсь.
По коду видно, что дело как правило не в языке :)
Facepalm... Использовать конкатенацию строк в цикле (вместо StringBuilder), а потом будут жаловаться, что "Java (Kotlin) тормозит"... И это только на первый взгляд.
R Плюсы: Открытый исходный код
Открытый исходный код
Плюс по сравнению с чем?
Наследует экосистему Java.
Null-безопасный
Это однозначно плюсы, но можно выбрать только один пункт. Как только вы начинаете тянуть джава библиотеки null безопаснось теряется.
Сборка команды для выполнения с помощью конктенации строк без экранирования? Это сильно расходится с "Цифровые навыки от ведущих экспертов".
Иногда отстутсвие экранирования приводит к такому:
https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/issues/123
"В этом проекте нами извлекается обобщенное резюме из значительного объема текста. Мы столкнулись с проблемой написания кода машинного обучения..."
......
"Установите pip с помощью команды ..."
Объясните тогда уж ЦА все про концепцию машинного обучения, а то наверно люди которые не могут сами поставить pip вообще не поймут зачем им его ставить.
Как я заставил Python взаимодействовать с Kotlin