Java 調用 Python腳本 踩坑


前言

前端時間研究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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM