【发布时间】:2019-12-03 00:56:11
【问题描述】:
我正在为用 Kotlin/Native 编写的命令行工具进行概念验证,因为它似乎是跨平台二进制文件的理想语言和运行时。
此命令行工具需要定期与 os 用户 $PATH 或 shell 环境中的操作系统可执行文件、命令和/或 shell 函数交互。但是,我在 kotlin-native samples 或任何地方的文档中没有看到任何可能表明如何:
- 执行操作系统可执行文件或 $PATH 命令
- 获取执行的返回码(整数)
- 确保执行进程的stdin、stdout和stderr文件描述符流可以分别表示为OutputStream和InputStreams
在 JVM 领域,我们会使用 java.lang.ProcessBuilder 来完成所有这些操作,但这显然在 Kotlin/Native 中不可用。
我找到了 cinterop/posix platform.posix.system 函数,但它不允许您访问进程的流。
在我的网络研究中,我发现了一个非常好的 C tutorial,它表明唯一干净的方法是使用 fork 和 dup2 等,但我不清楚它是否或如何翻译到 Kotlin/Native 代码。
【问题讨论】:
-
您好! AFAIK,
fork()和dup2都必须在platform.posix.*中,与编译器一起分发。你确定这还不够吗? -
@ArtyomDegtyarev 我知道它们在那里,但我从未使用过它们。因此,对我来说,如何 1) 以 C+Kotlin 最佳实践的方式通过适当的错误处理有效地使用它们并 2) 包装它们以启用类似于 ProcessBuilder 的东西,这对我来说并不明显。
-
有这方面的消息吗?同时可以用 kotlin native 执行 Process 吗??
-
@DirkHoffmann 不幸的是没有。我没有时间自己实现它,而且我知道还没有原生解决方案。
标签: kotlin kotlin-native