wood burning stoves 2.0*
The moose likes Java in General and the fly likes Execute windows command Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Execute windows command" Watch "Execute windows command" New topic
Author

Execute windows command

leo donahue
Ranch Hand

Joined: Apr 17, 2003
Posts: 327
Yesterday I started a thread and wished for it's deletion and poof, it was gone.

I wanted to follow up with my findings from experimenting with the Process Class and executing windows commands from inside a Java program.

I read the article about "When Runtime.exec() won't" but had a few comments about the info in that article. For starters, the article attempts to capture the stream from issuing a "javac" command. However, how does one know in advance that certain commands require an ErrorStream and certain commands only need the standard InputStream?

The article suggested the example of issuing "javac" was mediocre because the exitVal was = 2, however they never show you how to issue that command and get an exitVal=0

To me, I understand this to mean that issuing: "dir" produces an InputStream and issuing "javac" produces an ErrorStream. You can't output the stream from "javac" without the ErrorStream. When I try, the process hangs and no output is written.

Playing around with other windows system commands produces other error codes, such as exitVal=1 when you issue: "cmd.exe /c dir /?" You can output the stream using p.getInputStream, but the exitVal=1, which according to MSDN means that it is an "incorrect function".

Does this mean that capturing the stream from: "cmd.exe /c dir /?" was not implemented correctly, because the exitVal != 0 ?

Thoughts?

Sample code:



Thanks, leo
Karthik Shiraly
Ranch Hand

Joined: Apr 04, 2009
Posts: 492
    
    5
Hi,

When using Process, it's a good practice to read both the getInputstream (i.e, the stdout of the called process) and getErrorStream (i.e, the stderr of the called process).

If you have no special reason to process them separately, then a better approach is to use the ProcessBuilder class. Its redirectErrorStream() method allows the stderr of the called process to be redirected to its stdout; so only the getInputStream() needs to be read to get the contents of both streams.
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19656
    
  18

"dir /?" indeed reports that it exits with an error. Perhaps this is not incorrect implementation but choice - after all, dir does not list anything.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
 
jQuery in Action, 2nd edition
 
subject: Execute windows command
 
Similar Threads
running a batch file from java
Really confused about runtime.exec()
Launching telnet using java program fails with Win 7 OS
problem calling isql or osql from java
Process object