Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("ping localhost");
Code language: Java (java)
The command (I’ve used “ping localhost” ) can be anything that your command prompt recognizes. It will vary on UNIX and Windows environment. Now comes the bit where you would want to see the output of the execution. This I handled by created my wrapper to read the output stream. I then latch the stream to the process and bingo! Here’s the wrapper, its getter and the actual code to get the output: import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class RuntimeExec {
public StreamWrapper getStreamWrapper(InputStream is, String type){
return new StreamWrapper(is, type);
}
private class StreamWrapper extends Thread {
InputStream is = null;
String type = null;
String message = null;
public String getMessage() {
return message;
}
StreamWrapper(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
String line = null;
while ( (line = br.readLine()) != null) {
buffer.append(line);//.append("\n");
}
message = buffer.toString();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
// this is where the action is
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
RuntimeExec rte = new RuntimeExec();
StreamWrapper error, output;
try {
Process proc = rt.exec("ping localhost");
error = rte.getStreamWrapper(proc.getErrorStream(), "ERROR");
output = rte.getStreamWrapper(proc.getInputStream(), "OUTPUT");
int exitVal = 0;
error.start();
output.start();
error.join(3000);
output.join(3000);
exitVal = proc.waitFor();
System.out.println("Output: "+output.message+"\nError: "+error.message);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Code language: Java (java)
Java URL Encoder/Decoder Example - In this tutorial we will see how to URL encode/decode…
Show Multiple Examples in OpenAPI - OpenAPI (aka Swagger) Specifications has become a defecto standard…
Local WordPress using Docker - Running a local WordPress development environment is crucial for testing…
1. JWT Token Overview JSON Web Token (JWT) is an open standard defines a compact…
GraphQL Subscription provides a great way of building real-time API. In this tutorial we will…
1. Overview Spring Boot Webflux DynamoDB Integration tests - In this tutorial we will see…
View Comments
see ProcessBuilder
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ProcessBuilder.html
What i liked is the fact that i can convert it to print the output as the native command is being executed, by adding a output statement to the while loop in the StreamWrapper
However, if you try some other commands, like "date" or "dir" you will get a file not found IOException. some commands work and other don't...
Doesn't work with JVM7.
It doesn't work with me too.. :(
Hi Abhinav,
Your solution was amazing. I was trying to run a python script using a runtime environment within a Servlet. It was getting timed out at proc.waitFor()
Process proc = rt.exec("C:/Python27/python ./dev/src/__init__.py");
I used jython way of doing it but all are working in a standalone application but not through weblogic. Using this solution I could get the output within the console and I am able to use the output now. I was hunting for it from 4 days..
Thanks a lot...You rock..
Hello. This is a very wonderful code. However, i had a problem on showing the applications that do not specify its version. The output is not the same as what you see on the control panel.
This Is a very help me...
thk!!!
Why don't you just save the output in a file by just redirecting the the command line and just get data from the file.If your only concern is to view the output of the execution ?
thank a million for the code
i have to run 3 seperate commands on my terminal to get my output... should i create 3 different process for this in one pgm?
else how should i modify ur code to accomadate my requirement.
thank u!!!!!!!!!