首页 > 编程语言 >java代码调用Python代码

java代码调用Python代码

时间:2023-06-07 15:33:16浏览次数:37  
标签:lang java String Python 代码 util data

1,使用runtime调用Python脚本

String[] arguments = new String[]{
                "E:\\Program Files\\python.exe",
                "E:\\wzCode\\signal.py",
                Arrays.toString(datas),
                String.valueOf(Num)};
            // 执行py文件,注意:这里的命令都最好用绝对路径,到底用哪一个环境的下的Python,比如env下面的tf2的环境;具体执行哪个python文件,也是绝对路径
            Process proc = Runtime.getRuntime().exec(arguments);

1.1 ,传参不能传递数组[],这样只是传递了地址值。

1.2,将数组格式转换为List类型,转换为String,但是会显示文件名称过长

ava.io.IOException: Cannot run program "E:\Program Files\python.exe": CreateProcess error=206, 文件名或扩展名太长。
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at java.lang.Runtime.exec(Runtime.java:620)
    at java.lang.Runtime.exec(Runtime.java:485)
    at com.weizu.common.utils.file.FileReaderScheduler.parse(FileReaderScheduler.java:162)
    at com.weizu.common.utils.file.FileReaderScheduler.lambda$paroseDocutment$0(FileReaderScheduler.java:91)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: CreateProcess error=206, 文件名或扩展名太长。
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
    at java.lang.ProcessImpl.start(ProcessImpl.java:137)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 12 more

2,换种其他方式传递参数

2.1 如将原始数据保存读取后写入文件,调用Python脚本读取数据,执行算法返回参数。

java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        // 创建数据文件
        String fileName = "data.txt";
        FileWriter writer = new FileWriter(fileName);
        for (double i = 0; i < 1000000; i++) {
            writer.write(Double.toString(i) + "\n");
        }
        writer.close();

        // 执行 Python 脚本,并传递数据文件名作为参数
        String[] cmd = {"python", "script.py", fileName};
        Process p = Runtime.getRuntime().exec(cmd);

        // 读取 Python 脚本的输出结果
        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        in.close();
    }
}

Python代码

import sys
import numpy as np

def process_data(data_file):
    # 从数据文件中读取数据
    data = np.loadtxt(data_file)
    
    # 在这里处理数据,例如调用你的算法函数
    result = np.mean(data)
    
    # 返回处理结果
    return result

if __name__ == '__main__':
    # 将命令行参数解析为数据文件名
    data_file = sys.argv[1]
    
    # 处理数据
    result = process_data(data_file)
    
    # 输出结果
    print(result)

 

2.2 文件怎么能放小一点。

 

标签:lang,java,String,Python,代码,util,data
From: https://www.cnblogs.com/dangwang/p/17463212.html

相关文章

  • Java7新特性: 多异常捕获
    在Java7中引入了一种新的异常处理机制,即多异常捕获。在之前的版本中,我们通常使用单个catch块来捕获所有可能抛出的异常。但是,这种方式可能导致代码变得冗长且难以阅读。多异常捕获机制可以使代码更加简洁、易读,并且可以更准确地处理不同类型的异常情况。接下来就让我们大家一起来看......
  • python基础20
    绝对导入和相对导入绝对导入始终以执行文件位置查找相对导入使用符号(.)句点符(.).表示当前路径..表示上一级目录相对导入就可以不按照执行文件所在位置为基准,而是参照当前文件所在位置当文件中......
  • CodeGeeX 2.0版本重大升级:通过聊天对话的方式直接操作代码
    CodeGeeX2.0版本正式上线!从命名上看这是一次大版本的升级。上个月,CodeGeeX在VSCode和JetBrainsIDEs的插件中,加入了智能问答(AskCodeGeeX)功能,让用户可以在IDE中通过问答对话的方式解决技术问题。本周,这一功能全新升级!在CodeGeeX2.0正式版中,将问答与IDE编程环境深度融合,可以通过......
  • 线程同步:同步代码块
         ......
  • 一次简单的蓝牙相关安卓代码逆向记录
    前言本来工作方面和安卓根本没任何交集,把这个过程记录下来,只是一个小总结。涉及到的知识点有,安卓逆向,Smali修改,安卓apk签名,蓝牙连接,ADB。基本需求手里有一个设备,是支持双模蓝牙的。也就是经典蓝牙使用的名称和MAC地址,和低功耗蓝牙使用的是一样的。之前其他人开发过一个......
  • python的名称空间和作用域
    1、  2、内置名称空间:Python解释器启动则产生,关闭即销毁 全局名称空间:存放的名字:运行顶级代码产生的名字,或者说不是函数的定义,也不是内置的,剩下的都是。存活的周期:Python文件执行则产生,Python文件运行完毕后销毁 局部名称空间:存放的名字:再调用函数时,运行函数体代......
  • app直播源码,HTML的导航栏的代码
    app直播源码,HTML的导航栏的代码<!DOCTYPEhtml><html><head>  <metacharset="UTF-8">  <title>导航栏</title>  <style>    .box{      height:40px;      border-top:3pxsolidred;      border-bot......
  • 蓝桥杯十一届JavaA组-C++解题
    随便乱写,目前正确性未知C.本质上升序列#include<bits/stdc++.h>usingnamespacestd;boolaccess[4][4];intdfs(intidx,intx,inty){ if(x<0||y<0||x>=4||y>=4) return0; if(access[y][x]) return0; if(idx>=15) return1; intcount=0; access......
  • 【python练习】排列
    题目给定一个整数n,将数字1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。代码n=int(input())path=[0foriinrange(n)]used=[Falseforiinrange(n)]de......
  • 【NEFU】数据结构阶段二机试代码
    个人拙见,难免有不足之处,望大佬们斧正P1#defineMAXNODE64#include<stdio.h>#include<stdlib.h>typedefstructNode//边的信息{intadjvex;structNode*next;}ArcNode;typedefstructVNode//顶点的信息{intdata;ArcNode*firstarc;}Ve......