问题
NOTE: Path of python.exe has already been set
I am trying to create a Java program that passes the variable args (or any other variable) to a Python script.
import java.io.*;
public class PythonCallTest{
public static void main (String[] args){
String s = null;
Runtime r = Runtime.getRuntime();
try{
Process p = r.exec("cmd /c python ps.py+",args);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
while ((s = stdInput.readLine()) != null){
System.out.println(s);
}
while ((s = stdError.readLine()) != null){
System.out.println(s);
}
System.exit(0);
}
catch(IOException ioe){
ioe.printStackTrace();
System.exit(-1);
}
}
}
The program compiles but when I run it with
java PythonCallTest sender-ip=10.10.10.10
I get the error
'python' is not recognized as an internal or external command, operable program or batch file.
How do I properly concatenate the string in r.exec("cmd /c python ps.py+",args)
EDIT
If I execute the following
Process p = r.exec("cmd /c python ps.py sender-ip=10.251.22.105");
Then the program works. The path for python.exe has already been set. I just need to know how to add args to r.exec, i.e how to concatenate cmd /c python ps.py with args
回答1:
You are passing args as the second argument of Runtime.exec(...).
This overrides the default (inherited) environment of the new process to be useless, and hence the Path variable no longer contains the path to python.exe.
You need to use this version of Runtime.exec(...):
public Process exec(String[] cmdarray);
Which you would do so like this:
public static void main(String[] args) {
...
List<String> process_args = new ArrayList<String>(Arrays.asList("cmd", "/c", "python", "ps.py"));
process_args.addAll(Arrays.asList(args));
Runtime r = Runtime.getRuntime();
try {
Process p = r.exec(process_args.toArray(new String[] {}));
...
} catch (IOException e) {
...
}
}
来源:https://stackoverflow.com/questions/24512412/java-to-pass-args-to-a-python-script