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:
String cmd = "python/";
String py = "file";
String run = "python " +cmd+ py + ".py";
System.out.println(run);
//Runtime.getRuntime().exec(run);
Process p = Runtime.getRuntime().exec("python file.py");
Either using variable run, or the whole path or “python file.py” my code is running showing the message build successful total time 0 seconds without execute the file.py. What is my problem here?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can use like this also:
String command = "python /c start python pathtoscriptscript.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);
Method 2
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();
Method 3
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();
Method 4
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
Method 5
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
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0