对于项目,我需要通过Runtime.getRuntime.exec()启动python.exe。但是,当我尝试运行它时它不会执行,但它不会抛出IOException。这是代码:
try
{
Process process=Runtime.getRuntime().exec("C:\\Program Files (x86)\\PythonTest\\python.exe");
}
catch (IOException e)
{
System.out.println("Cannot find python.exe");
e.printStackTrace();
}
答案 0 :(得分:1)
您需要获取流程的输出并(waitFor()
完成)。像,
final String cmd = "C:/Program Files (x86)/PythonTest/python.exe";
Process p = Runtime.getRuntime().exec(cmd);
final InputStream is = p.getInputStream();
Thread t = new Thread(new Runnable() {
public void run() {
InputStreamReader isr = new InputStreamReader(is);
int ch;
try {
while ((ch = isr.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
t.start();
p.waitFor();
t.join();
要实际使用python
执行某些操作,您需要获取OutputStream
。
答案 1 :(得分:1)
我认为问题是由于eval
错误地拆分了命令字符串。我的理解是exec("C:\\Program Files (x86)\\PythonTest\\python.exe")
将尝试运行名为"C:\\Program"
的应用程序,并传递2个命令行参数。
请改为尝试:
exec(new String[]{"C:\\Program Files (x86)\\PythonTest\\python.exe"});
exec(String, ...)
命令行解析是原始的,并且从程序员的角度来看通常具有不正确的行为。最好的办法就是自己拆分命令和参数。