java调用python脚本(python-pptx)
这篇文章给大家聊聊关于java调用python脚本,以及python-pptx对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
Java怎么调用pyd文件
在做项目的时候,有的时候由于合作人员之间所会的编程语言的不同,会导致项目合作中的一些问题,很多时候需要不同语言之间的调用,这次就分享一下java调用python代码的东西。
一、python代码运行
巧妇难为无米之炊。首先,要确保python环境配置完好,并且相应的python代码可以运行。这个就不在这里进行讲述了,如果有需要可以查看我之前的一些文章。
二、java调用python代码
1、查阅了一些网上资料,看到了很多介绍使用jython调用python代码的例子,不过由于一些原因我没有尝试这个方法,而是直接测试了Runtime.getRuntime().exec(args)这个java库中自带的方法,下面直接切入主题。
2、先直接上代码:
python代码(helloword.py):
# coding:utf-8import numpy as np
if __name__=='__main__':
a= np.ones(3)
print(a) print'恭喜您!java调用python代码成功'
java代码(MyDemo.java):
import java.io.BufferedReader;import java.io.InputStreamReader;public class MyDemo{ public static void main(String[] args){ try{
System.out.println("start");
String[] args1=new String[]{"/home/huan/anaconda2/bin/python","/home/huan/myfile/pythonfile/helloword.py"};
Process pr=Runtime.getRuntime().exec(args1);
BufferedReader in= new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String line; while((line= in.readLine())!= null){
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println("end");
} catch(Exception e){
e.printStackTrace();
}
}
}
执行结果:
需要注意的是此行代码:
String[] args1=new String[]{"/home/huan/anaconda2/bin/python","/home/huan/myfile/pythonfile/helloword.py"};
这句代码是很重要的,首先一定要设置好你所使用的python的位置,切记不要直接使用python,因为系统会默认使用自带的python,所以一定要设置好你所使用的python的位置,否则可能会出现意想不到的问题(比如说我使用的是anaconda中的python,而ubuntu系统会默认调用自带的python,而我自带的python中并没有numpy库,所以会造成相应的代码不会执行的问题,所以设置好python的位置是很重要的)。还有就是要设置好py文件的位置,使用绝对路径。
还有就是可以看出,此方法可以满足我们python代码中调用第三方库的情况,简单实用。
三、java中向python代码动态传参
python代码(helloword.py):
# coding:utf-8import numpy as npimport sys
if __name__=='__main__':
a= np.ones(3)
print(a) print'恭喜您!java调用python代码成功'
print'脚本名为:%s'%(sys.argv[0]) print'传入的参数为:'
for i in range(1, len(sys.argv)): print'参数:%s'%(sys.argv[i])
java代码(MyDemo.java):
import java.io.BufferedReader;import java.io.InputStreamReader;public class MyDemo{ public static void main(String[] args){ try{
System.out.println("start");
String para1="time";
String para2="sfdjk";
String[] args1= new String[]{"/home/huan/anaconda2/bin/python","/home/huan/myfile/pythonfile/helloword.py",para1,para2};
Process pr= Runtime.getRuntime().exec(args1);
BufferedReader in= new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String line; while((line= in.readLine())!= null){
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println("end");
} catch(Exception e){
e.printStackTrace();
}
}
}
代码运行结果为:
好了,多余的话就不说了,一切尽在代码中。此处的分享就到这里了。
解决Java调用Python脚本时返回9009错误码的问题
解决Java调用Python脚本返回9009错误码的核心方法是确认Python解释器路径和脚本路径的正确性,并确保文件权限可访问。以下是详细排查和解决方案:
一、确认Python解释器路径检查环境变量配置
在Windows系统中,打开“系统属性”→“高级”→“环境变量”,检查PATH是否包含Python安装路径(如C:Python311或用户目录下的Python路径)。
若未配置,需手动添加路径或直接在Java代码中显式指定解释器路径。
显式指定解释器路径在Java代码中,通过ProcessBuilder的构造函数直接传入Python解释器的绝对路径,避免依赖环境变量。例如:
String pythonInterpreter="C:Python311python.exe";//替换为实际路径String scriptPath="C:CS IAsrcjavafindUSB.py";ProcessBuilder processBuilder= new ProcessBuilder(pythonInterpreter, scriptPath);二、检查Python脚本路径使用绝对路径
避免使用相对路径(如./scripts/findUSB.py),因其依赖Java程序的工作目录。
确认脚本路径中的反斜杠在Java字符串中需转义(如C:pathtoscript.py)或使用正斜杠(C:/path/to/script.py)。
验证文件权限
确保Java进程有权限读取和执行Python脚本。
在Windows中,右键脚本文件→“属性”→“安全”,检查用户或组权限;在Linux/macOS中,使用chmod+r script.py赋予读取权限。
三、代码优化与调试完整代码示例以下代码整合了路径检查、输出解析和异常处理:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class USBChecker{ public boolean usbConnected(){ try{ String pythonInterpreter="C:Python311python.exe"; String scriptPath="C:CS IAsrcjavafindUSB.py"; ProcessBuilder processBuilder= new ProcessBuilder(pythonInterpreter, scriptPath);//合并错误流(可选,避免脚本错误输出阻塞) processBuilder.redirectErrorStream(true); Process process= processBuilder.start(); BufferedReader reader= new BufferedReader(new InputStreamReader(process.getInputStream())); String line; boolean isConnected= false; while((line= reader.readLine())!= null){ System.out.println("Python Output:"+ line); try{ isConnected= Boolean.parseBoolean(line.trim());} catch(NumberFormatException e){ System.err.println("解析失败:"+ line);}} int exitCode= process.waitFor(); System.out.println("Exit Code:"+ exitCode); return exitCode== 0&& isConnected;} catch(IOException| InterruptedException e){ e.printStackTrace(); return false;}} public static void main(String[] args){ USBChecker checker= new USBChecker(); System.out.println("USB Connected:"+ checker.usbConnected());}}关键调试点
打印Python输出:通过System.out.println输出脚本的每一行结果,确认脚本是否执行及输出格式是否符合预期。
检查退出码:若脚本执行失败(如语法错误),退出码可能为非零,需结合脚本日志进一步排查。
异常处理:捕获IOException(路径错误)和InterruptedException(进程中断),避免程序意外终止。
四、替代方案:使用Java原生库若频繁调用Python脚本且性能要求高,建议改用Java库实现相同功能:
USB检测库:javax.usb:Java标准库(需额外依赖),支持跨平台USB设备枚举。
usb4java:基于libusb的Java绑定,提供更底层的USB控制能力。
优势:避免跨语言调用的开销和路径问题。
代码更易维护,减少依赖项。
五、总结9009错误本质:系统无法定位Python解释器或脚本文件,通常由路径错误或权限不足导致。解决步骤:显式指定Python解释器路径。
使用绝对路径引用脚本文件。
验证文件权限和脚本输出格式。
添加调试信息定位问题。
长期方案:评估是否需用Java库替代Python脚本,平衡开发效率与性能需求。通过系统化排查和代码优化,可高效解决9009错误并提升跨语言调用的稳定性。
java和python是什么
java是什么?Java源自C,拥有跨平台、面向对象、泛型编程的特性,非常受企业的喜欢。
其次,Java语言还具有较高的安全特性,因此Java经常被用在网络环境中。
同时,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
python是什么?Python是一种解释型脚本语言,其在设计上也坚持了清晰划一的风格,这使得Python成为易读、易维护的语言。
相比于其他语言,Python中的语言语法和语义要简单得多,而且代码也具可读性。在大多数情况下,为了解决某一特定的问题,Python编写所需代码,要比其他流行语言所需的代码少得多。
而且Python中的模块化体系结构,使得导入和使用模块不是编写大块代码,一个成熟的模块生态系统就已经可以帮你解决问题。
因此,对于新手来说,Python是一种很容易上手,并便于维护的语言
java和python区别:1.Python比Java简单,学习成本低,开发效率高
2.Java运行效率高于Python,尤其是纯Python开发的程序,效率极低
3.Java相关资料多,尤其是中文资料
4.Java版本比较稳定,Python2和3不兼容导致大量类库失效
5.Java开发偏向于软件工程,团队协同,Python更适合小型开发
6.Java偏向于商业开发,Python适合于数据分析
7.Java是一种静态类型语言,Python是一种动态类型语言
8.Java中的所有变量需要先声明(类型)才能使用,Python中的变量不需要声明类型
9.Java编译以后才能运行,Python直接就可以运行;
10.JAVA里的块用大括号对包括,Python以冒号+四个空格缩进表示。
11.JAVA的类型要声明,Python的类型不需要。
12.JAVA每行语句以分号结束,Python可以不写分号。
13.实现同一功能时,JAVA要敲的键盘次数一般要比 Python多。
推荐课程:Python基础(周莫烦)
java调用python脚本的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python-pptx、java调用python脚本的信息别忘了在本站进行查找哦。