Using Runtime.exec() in Java?

It will inherit the path from the Java process. So whatever environment the Java process has, the spawned process will have as well. Here's how to check the environment.

Up vote 2 down vote favorite 1 share g+ share fb share tw.

I'm trying to run gpsbabel which I have put into the path (/usr/local/bin). Public class GpxLib { public static void main(String args) { try { Runtime r = Runtime.getRuntime(); Process p = r. Exec("gpsbabel -i garmin -f usb: -o gpx -F -"); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); while (true) { String s = br.readLine(); if (s == null) break; System.out.

Println(s); } br.readLine(); } catch (IOException e) { e. PrintStackTrace(System. Err); } } } java path exec link|improve this question asked Aug 23 '09 at 19:02Jason S34.9k1394244 72% accept rate.

It will inherit the path from the Java process. So whatever environment the Java process has, the spawned process will have as well. Here's how to check the environment: Map env = System.getenv(); for (String envName : env.keySet()) { System.out.

Format("%s=%s%n", envName, env. Get(envName)); } Have you set the PATH and exported it? If you don't export it, then it's not available to subprocesses.

Additionally, you must consume stdout and stderr concurrently, to prevent blocking. Otherwise stuff will work in some circumstances, then your spawned process will output a different quantity of data and everything will grind to a halt. See this answer for more details.

I haven't set the path at all, anywhere. It is whatever the default path is for Eclipse and for bash. – Jason S Aug 23 '09 at 19:24 The path will be set per user.

You may want to add the path entry for that executable in your . Bashrc (and perhaps login again if you're launching Eclipse from the toolbar or similar) – Brian Agnew Aug 23 '09 at 19:53 I think the real solution is to specify the complete path to the binary, however, so that your program isn't environment dependent, and then make that a configuration item. That's usually my strategic approach.

– Brian Agnew Aug 23 '09 at 19:55 agreed, I suppose the better way is to use a . Properties file.... I just hate having to run java programs like "java -Dsome.ugly. Variable=/usr/local/bin/gpsbabel -jar myjar.

Jar" – Jason S Aug 23 '09 at 19:58 ...and I just want to put gpsbabel someplace appropriate so I can access it on the path. I asked a question somewhere (dammit, can't find which question, I thought it was on superuser or serverfault) and /usr/local/bin was the recommended place. – Jason S Aug 23 '09 at 20:01.

Whatever you do, you must read this. No one should use Runtime.exec() without having read it.

Found that already... it doesn't talk at all about the path – Jason S Aug 23 '09 at 19:12.

I added a call to System.out. Println(System. Getenv("PATH")); which only prints out /usr/bin:/bin:/usr/sbin:/sbin so for some reason /usr/local/bin doesn't show up.

Looks like this is a MacOSX question or an Eclipse question, not a Java question. Edit: asked this question on superuser instead.

See my modified answer re. Variables and exporting – Brian Agnew Aug 23 '09 at 19:20.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions