前言
前端時間研究Java調用opencv后,需要Python對圖像進行處理,便轉戰Java調用Python
1、首先安裝Anaconda3
在安裝過程中需勾選配置環境變量
2、process.waitFor()
執行返回9009,但是不報錯,返回為0才是正常
此時在cmd輸入where python
D:\Program\Python>where python
E:\Program\Anaconda3\python.exe
C:\Users\A\AppData\Local\Microsoft\WindowsApps\python.exe
發現是兩個python.exe,這就是罪魁禍首,需前往C:\Users\A\AppData\Local\Microsoft\WindowsApps
下刪除python.exe,程序正常運行
參考:關於Java調用python腳本waitFor:9009及cmd執行python無響應、無輸出問題
Java代碼
package com;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CallPython {
public static void main(String[] args) {
String[] args1 = new String[]{"E:\\Program\\Anaconda3\\python.exe", "D:/Program/Python/videoRec.py", "1", "2"};
System.out.println("result=" + callPython(args1));
}
private static String callPython(String... param) {
String result = "";
Process process = null;
BufferedReader reader = null;
try {
process = Runtime.getRuntime().exec(param);
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (!"".equals(line)) {
result = line;
}
}
System.out.println("waitFor=" + process.waitFor());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (process != null) {
process.destroyForcibly();
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
}
}
jiafa.py腳本文件
import sys
def fun(a,b):
print(a+b)
return (a+b)
if __name__ == '__main__':
a = sys.argv[1]
b = sys.argv[2]
fun(a,b)