I am trying to execute a .py file from java code. I move the .py file in the default dir of my java project and I call it using the following code:
Strin
You can run the python script
Process p = Runtime.getRuntime().exec(PYTHON_ABSOLUTE_PATH, script_path)
To get the PYTHON_ABSOLUTE_PATH just type
which python2.7
in terminal
Though the OP has got the answer, I'm posting my solution which might help someone else like me..
File file = new File(("C:/.../file.py"));
List<String> list = new ArrayList<String>();
list.add("python.exe");
String absPath = file.getAbsolutePath();
System.out.println("absPath>>"+absPath);
list.add(absPath);
ProcessBuilder pb = new ProcessBuilder(list);
Process process = pb.start();
InputStream inputStream = process.getInputStream();
byte[] b = new byte[1024 * 1024];// {(byte) 1024};
while (inputStream.read(b) > 0) {
System.out.println("b.length>>"+new String(b));
}
process.waitFor();
System.out.println("exitValue()>>"+process.exitValue()); //Should return 0 on successful execution
I believe we can use ProcessBuilder
Runtime.getRuntime().exec("python "+cmd + py + ".py");
.....
//since exec has its own process we can use that
ProcessBuilder builder = new ProcessBuilder("python", py + ".py");
builder.directory(new File(cmd));
builder.redirectError();
....
Process newProcess = builder.start();
You can use like this also:
String command = "python /c start python path\to\script\script.py";
Process p = Runtime.getRuntime().exec(command + param );
or
String prg = "import sys";
BufferedWriter out = new BufferedWriter(new FileWriter("path/a.py"));
out.write(prg);
out.close();
Process p = Runtime.getRuntime().exec("python path/a.py");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String ret = in.readLine();
System.out.println("value is : "+ret);
Run Python script from Java
String command = "cmd /c python <command to execute or script to run>";
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
bri.close();
while ((line = bre.readLine()) != null) {
System.out.println(line);
}
bre.close();
p.waitFor();
System.out.println("Done.");
p.destroy();