【问题标题】:Appending environmental varibles programmatically to current process [closed]以编程方式将环境变量附加到当前进程[关闭]
【发布时间】:2014-10-07 13:08:09
【问题描述】:

主要目的是通过java代码设置环境变量。

Process process = Runtime.getRuntime().exec("export MY_ENV=123");

总是返回一个新进程。但我希望它为当前进程执行.. 有没有办法将输出附加到当前进程?

【问题讨论】:

  • 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用exec并使用ProcessBuilder创建进程。
  • 已回答over here。像这样改变整个问题并不是一个好主意。我建议您恢复您的编辑。

标签: java runtime.exec


【解决方案1】:

使用ProcessBuilder

  • inheritIO 可让您将已启动进程的流与当前进程挂钩
  • waitFor 允许您等待外部进程完成

例子:

new ProcessBuilder("/bin/ls").inheritIO()
                             .start()
                             .waitFor();

【讨论】:

  • inheritIo() 方法很有效!!
【解决方案2】:

exec 调用返回的Process 包含三个流:

  1. process.getOutputStream(),如果您写信,它将被“传送”到正在运行的进程中
  2. process.getInputStream(),如果从中读取,将包含标准输出(ls 输出)
  3. process.getErrorStream() whihc,如果从中读取,将包含标准错误输出(来自运行 ls 的错误消息,如果有的话)。

作为程序员,你有责任从这些流中读取数据,并将它们输出到程序的输出中,如果你想要的话。

另外,如果你也想得到它,你应该检查process.exitValue()

设置单独的线程来监控 Stdout 和 Stderr 流有点常见

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 2020-06-17
    • 2010-12-27
    • 1970-01-01
    • 2012-09-14
    • 2011-01-08
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多