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