首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为ProcessBuilder设置环境

为ProcessBuilder设置环境
EN

Stack Overflow用户
提问于 2012-04-05 20:17:24
回答 6查看 38.5K关注 0票数 14

我在Java (1.6)中设置Linux环境时遇到了一个奇怪的问题;特别是"PATH“变量。

简而言之,我有一个运行本机进程的管道,它使用java.lang.ProcessBuilder。用户可以选择通过名为environmentHashMap设置环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ProcessBuilder pb = new ProcessBuilder(args);
Map<String, String> env = pb.environment();
if (environment != null)
   env.putAll(environment);
Process process = pb.start();

如果我将env变量转储到控制台,则会正确设置该变量,并为PATH变量指定正确的值。但是,运行该进程会导致抛出Exception

java.io.IOException: error=2, No such file or directory

在终端shell中使用相同的环境变量可以很好地运行相同的进程。为了测试这一点,我在终端中设置了环境之后运行了Eclipse。在这种情况下,ProcessBuilder进程可以正确运行。

因此,必须发生的是,ProcessBuilder使用的不是我为其设置的环境,而是当前的系统环境。

我在网上找不到这个问题的令人满意的答案。也许这是特定于操作系统的问题?或者我还漏掉了什么?

EN

回答 6

Stack Overflow用户

发布于 2012-04-05 21:37:37

我不认为这是一个bug,我认为这是你对环境变量的边界和角色的理解的问题。ProcessBuilder.environment()包含的环境变量对于衍生的进程来说是“本地进程”的。它们不是系统范围的,也不是登录范围的,它们甚至不会影响ProcessBuilder运行的环境。

ProcessBuilder.environment()映射包含进程本地变量,派生的进程只能在中看到这些变量。显然,看到ProcessBuilder.environment()的派生进程的先决条件是成功派生进程,这是我认为您甚至还没有达到的点。

据我所知,(从Java中)修改当前运行的进程的路径是不可能的,我认为这是您期望发生的事情(或者能够做到的事情)。因此,我认为您必须将ProcessBuilder指向您尝试启动的可执行文件的完全限定路径(或者确保在启动将使用ProcessBuilder的JVM之前正确设置了该路径,这就是您在启动集成开发环境之前在终端中设置它的“工作”场景中所做的)。

票数 16
EN

Stack Overflow用户

发布于 2012-05-22 16:55:16

在Linux上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String path = System.getenv("HOME");

ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c","export PATH=" +
    "PATH-TO-ADD" + ":" + path + " && exec");

在这种情况下,会根据需要更新PATH变量,并在新的$PATH中搜索可执行文件。这对我在Linux上是有效的。

票数 8
EN

Stack Overflow用户

发布于 2015-12-03 08:34:05

您需要了解环境变量是流程上下文的局部变量。一个新进程获得父进程环境的副本,但每个副本都是独立的。父对象中的更改不会影响现有的子项(仅影响新的子项),子项中的更改也不会影响父项或父项的新子项。

在本例中,Java进程创建子进程,并将修改后的PATH变量放入子进程的上下文中。这不会影响Java进程。子进程不是shell,因此它忽略了PATH变量。该进程直接使用操作系统服务创建。它们会查看Java进程的上下文,其中包含旧的PATH变量,除非您在启动Java进程之前更改了shell中的环境。

要解决您的问题,您有两个选择:

  1. 检查Java语言中的PATH变量,将其拆分成路径元素,然后手动搜索可执行文件。然后,您可以使用绝对路径调用ProcessBuilder,并将新的PATH放入子进程中,这样孙子进程就会具有正确的路径。
  2. 调用一个shell来启动子进程。shell将使用它的路径(可以通过environment).

传递

第二种情况是这样的:

使用正确的PATH.

  • You创建环境启动shell进程。

  • 您将要运行的命令作为参数传递给shell ("sh", "-c", "cmd args""cmd.exe", "/c", "cmd args")

  • The shell将注意到,它必须运行一个命令,然后它将查看(您在步骤1中配置的)环境,找到修改的PATH并运行正确的命令。

<>G227>

第二种情况的缺点是,您必须正确地转义和/或引用命令的参数(args),否则空格和其他特殊字符将导致问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10035383

复制
相关文章
[1118]设置Maven的编译环境为1.8的方法
遇到的问题: 项目默认使用 jdk1.7, 每次 update maven 的时候, 项目都会重新恢复到1.7进行编译, 导致部分使用1.8新特性的代码会报红
周小董
2022/04/13
1K0
[1118]设置Maven的编译环境为1.8的方法
Mac环境变量设置(以ADB为例)
按回车输入密码后用vi打开用户目录下的bash_profile文件。一定要用sudo,否则没权限保存文件。
毛大姑娘
2020/09/10
3.6K0
ProcessBuilder API 使用教程
Java 的 Process API 为开发者提供了执行操作系统命令的强大功能,但是某些 API 方法可能让你有些疑惑,没关系,这篇文章将详细介绍如何使用 ProcessBuilder API 来方便的操作系统命令。
未读代码
2023/09/01
6350
ProcessBuilder API 使用教程
RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
很多网友会问,为什么明明集群中有多台Broker服务器,autoCreateTopicEnable设置为true,表示开启Topic自动创建,但新创建的Topic的路由信息只包含在其中一台Broker服务器上,这是为什么呢?
丁威
2019/06/15
3.2K1
怎么设置pycharm环境_怎么设置环境光影响物体
不舍昼夜在Pycharm前敲打代码,已经是大半年前的事了,而我也大半年没接触Pycharm找个软件了。今天由于项目需要,重新打开犹如一个陌生软件。折腾几分钟才渐渐回忆起那些熟悉的操作,但这几分钟以及在这几分钟前的对于陌生畏惧,以后都想尽力避免罢了。
全栈程序员站长
2022/09/27
3.5K0
怎么设置pycharm环境_怎么设置环境光影响物体
为npm设置代理
npm全称为Node Packaged Modules。它是一个用于管理基于node.js编写的package的命令行工具。其本身就是基于node.js写的,这有点像gem与ruby的关系。
墨文
2020/02/28
23.2K0
DC启动环境设置
  我们按照前面的基本流程使用DC进行设置,但是这里主要使用的是脚本,因此不能一条一条命令进行演示其效果。在启动DC之前,首先要配置DC的启动环境,也就是那些库的设定。配置DC的启动环境主要是.synopsys_dc.setup配置文件的书写。.synopsys_dc.setup这个文件就是DC的配置文件,它配置了DC启动过程中要执行哪些命令、干哪些事。其中,search_path 、target_library...等等(后面会讲,放在这里给大家留个印象),这些是DC内部的变量名称,用来告诉DC做那些事的方法。
数字芯片社区
2020/07/20
2.1K0
DC启动环境设置
BitShares 2.0 环境设置
BitShares 2.0 环境设置 工作环境:Ubuntu 第一步:准备环境与下载 BitShares 2.0  Core 源代码: bitshares-core 见证节点和命令行钱包,C++代码,基于石墨烯区块链。 sudo apt-get update sudo apt-get install autoconf cmake git libboost-all-dev libssl-dev g++ libcurl4-openssl-dev git clone https://github.com/bi
田春峰-JCJC错别字检测
2018/04/16
7960
pycharm 设置环境变量_电脑环境变量怎么设置
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175266.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
4.5K0
pycharm 设置环境变量_电脑环境变量怎么设置
开发环境通用设置
最近IDE有点问题,每次调整完设置的时候都要搜一次,烦了,直接自己记下来。 开发IDE设置保护色 RGB: red:204;green:232;blue:207 十六进制: CCE8CF Mac 设置环境变量 打开配置文件: vi ~/.bash_profile 加入配置并保存: ANDROID_NDK_CMD=/Users/hardyshi/Documents/Library/android-ndk-r9c/ndk-build export ANDROID_ND
子勰
2018/05/22
5770
ubuntu 18.04下Chromium设置为系统设置
在ubuntu 18.04下挂上ss后firefox能直接上gg了但是chromium上不去 会出现下面两种情况
Enterprise_
2019/06/14
2.8K0
ubuntu 18.04下Chromium设置为系统设置
MacOS环境设置笔记
家里只有一台电脑,大家需要一起用时,最好的方法就是使用不同的账户。不同用户的配置相互独立,比如同一个chrome,两个账户收藏夹是独立的,不会相互影响。 但安装应用时,就会发现,应用是不独立的。一个账户安装了应用,其它账户下也能看到。 对此,我们可以在安装的时候注意安装的目录。mac下通常不是windows这种下一步下一步安装,是把程序拖拽到应用文件夹中。 所以我们可以把某些只有自己需要的应用,移动到个人目录下的应用程序文件夹中。 访达打开后,点击上面工具栏的 前往->个人 (快捷键 Command+shift+H),将应用放入这个 应用程序 文件夹,就只有这个用户看得到。而且启动台上也能看到。
sean.liu
2022/08/03
6490
MacOS环境设置笔记
网站环境设置(1)
在云主机上用nginx跑几个虚拟主机运行几个不同的网站是很常见的事。下面仅是常用步骤的一个备忘记录,尤其免密码sudo的设置在生成环境中是绝对不推荐的。
dhyuan
2022/05/30
7590
C++ 环境设置
如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。
用户7952898
2020/11/09
2.3K0
Linux环境基本设置
安装好Linux系统后,通常要做一些基本设置,比如网络,防火墙等。 1.修改ip地址,执行如下命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes #开机使用 BOOTPROTO=static #ip地址设置为静态 IPADDR=192.168.92.82 #Linux服务器ip地址 GATEWAY=192.168.92.1 #网关地址 NETMASK=255.
sparkle123
2018/04/26
3.8K0
pycharm 设置环境_pycharm 虚拟环境
这个页面有两个选项,New environment using 这个选项是建立一个虚拟的python运行环境,目录就是之前自己设置的项目目录下的venv(virtule environment简称),这个虚拟环境可以包含你运行本工程需要的支持包,并可以在这个虚拟的环境中安装新的支持包,这能给你建立一个相对独立的python环境,这个新建虚拟环境的下面两个子选项的意思是继承全局的site-package,含义就是将自己python路径下的site-package链接到你的venv下面以供使用(在venv下面生成几个配置文件,可以链接到你的本地python/Lib/site-package),第二个子选项的含义是你在这个工程中使用的python解释器可以对其他工程可见。
全栈程序员站长
2022/09/20
9710
pycharm 设置环境_pycharm 虚拟环境
MongoDB设置为Windows服务
       每次使用Mongodb都要开启两个命令行,一个开启主流程程序,一个开启客户端程序。你是否想过更方便的操作方式?对的,那就是把主流程程序设置为Windows的服务,客户端程序也可以自定一个命令行脚本实现快捷启动。以下均以win8系统作为操作系统。
程序新视界
2022/11/30
9130
MongoDB设置为Windows服务
pycharm设置代理_mac pycharm怎么设置环境
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175050.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
3.4K0
pycharm设置代理_mac pycharm怎么设置环境
laravel validate 设置为中文(验证提示为中文)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113142.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
3K0
如何设置python的环境变量_anaconda环境变量手动设置
在python项目实践中,不知道为什么我的os.getenv一直拿不到环境变量,于是我就试了三种设置环境变量的方法,中解决了问题。
全栈程序员站长
2022/09/25
4.6K0
如何设置python的环境变量_anaconda环境变量手动设置

相似问题

paypal通过商家API取消交易

110

PayPal REST API:代表商家发出请求

13

PayPal使用REST API从商家向用户汇款

11

PayPal -商家取消交易

16

codeigniter CI商家paypal

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文