【问题标题】:Read environment variable in Kotlin/Native在 Kotlin/Native 中读取环境变量
【发布时间】:2019-03-05 10:04:49
【问题描述】:

好的,所以我想创建一个原生应用程序来读取一些环境变量,并根据一些业务逻辑,将它们的值更改为其他值。我决定用 Kotlin 来做。

我设法通过创建函数来了解如何更改系统环境变量:

fun call(arg: String) = platform.posix.system(command)

fun setEnvironmentVariable(variable: String, value: String) {
    println("Changing value of $variable to $value")
    call("SETX $variable $value")
}

但它只会改变价值。我想将它存储在 Kotlin 变量中并对其进行一些操作。

发出语句 call("SET $variable") 将值打印到命令提示符,但我不知道如何从 Kotlin 中捕获它。我想是否有一种方法可以将命令提示符的输出提取到一个字符串中,这样会更容易,即使 Windows 以 myvariable=myvalue 的形式输出它,而不仅仅是值。

提前致谢

【问题讨论】:

  • 产生一个子进程来读取环境变量的值是使用大锤来破解坚果。见stackoverflow.com/questions/44320495/…
  • @DodgyCodeException System.getenv 是 Kotlin JVM,不是原生的
  • 我看不到该页面如何包含对这里问题的任何答案。那里的答案只建议利用 System.getenv() 函数(我不能,因为我使用的是 Kotlin Native,而不是 JVM),或者使用第三方库进行配置,“使用从多个来源收集的属性 - 构建在资源、系统属性、属性文件、环境变量、命令行参数等”(这本身就是一个大锤)。我可能遗漏了一些东西,所以如果是这种情况并且链接页面实际上包含对我的问题的修复,那么请告诉我。
  • @KevinGalligan 你是对的,对不起。
  • 您可以使用"echo %$variable%" 代替SET 命令。这样你就不会得到变量=值模式,而只是值本身。您还必须以某种方式将标准输出重定向到 Kotlin 进程。但可能你最好使用与 C 的互操作,然后你可以使用 C 的 getenv() 调用。

标签: kotlin environment-variables kotlin-native


【解决方案1】:

以下是在 Kotlin/Native 中读取环境变量的方法:

import platform.posix.*
import kotlinx.cinterop.*

fun main() {
    val variable = "whatever..."
    println(getenv(variable)?.toKString())
}

【讨论】:

  • 工作就像一个魅力。 getenv("$variable") 表示法是什么?对于现有和不存在的系统变量,getenv(variable) 似乎对我给出了相同的结果。
  • @Mattias 你是对的,那是不必要的。已编辑。
  • 感谢您的帮助。
猜你喜欢
  • 2017-11-03
  • 2018-03-09
  • 1970-01-01
  • 2022-07-29
  • 2017-03-06
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多