2014-10-07 79 views
2

主要目的是通過Java代碼設置環境變量。以編程方式向當前進程添加環境變量

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

總是返回一個新的進程。但我希望它爲當前進程執行..有沒有辦法將輸出追加到當前進程?

+1

另請參見[當Runtime.exec()不會](http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won -t.html)提供了許多有關正確創建和處理流程的好建議。然後忽略它是指'exec'並使用'ProcessBuilder'來創建進程。 – 2014-10-07 19:13:23

+2

這已被回答[在這裏](http://stackoverflow.com/questions/318239/how-do-i-set-environment-variables-from-java)。改變整個問題並不是一個好主意。我建議你恢復你的編輯。 – aioobe 2014-10-08 17:48:07

回答

3

使用ProcessBuilder

  • inheritIO可以給你提供了啓動過程的流當前進程
  • waitFor允許您等待外部過程完成

示例:

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

inheritIo()方法像魅力一樣工作! – shashantrika 2014-10-08 18:16:11

0

Processexec調用返回包含三個流:

  1. process.getOutputStream(),如果你寫不出來,會到正在運行的進程「管道」
  2. process.getInputStream(),如果讀取,將包含標準輸出(ls輸出)
  3. process.getErrorStream()如果從中讀取,將包含標準錯誤輸出(來自運行ls的錯誤消息,如果有的話)。

作爲程序員,您需要從這些流中讀取數據並將它們輸出到程序的輸出中,如果這是您想要的。

另外,如果你想得到,也應該檢查process.exitValue()

它是有點共同設立單獨的線程來監視輸出和錯誤流

相關問題