Java调用Python脚本

简介: Java调用Python脚本

1. 通过Runtime进行调用

  • 传参
/**
    * 通过Runtime调用Python脚本
    * @param args
    * @throws IOException 
    * @throws InterruptedException 
    */
   public static void main(String[] args) throws IOException, InterruptedException{
       String exe = "python3";
       String command = "D:\\calculator_simple.py";
       String[] cmdArr = new String[] {exe, command, "1", "2"};
       Process process = Runtime.getRuntime().exec(cmdArr);
       InputStream is = process.getInputStream();
       DataInputStream dis = new DataInputStream(is);
       String str = dis.readLine();
       process.waitFor();
       System.out.println(str);
   }
  • 返回结果
public static void main(String[] args) throws IOException, InterruptedException{
   String python = "python3.10"; 
   String script = "D:\\calculator_simple.py";
   String command = python + " " + script + " 1 2";
   Process process = Runtime.getRuntime().exec(command); 
   BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
   String line;
   String result = null;
   while ((line = in.readLine()) != null) {
       result = line;
       System.out.println("返回结果:" + result);
   }
   in.close();
   process.waitFor();
   System.out.println(result);
}
  • calculator_simple.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# from sys import argv
import sys
num1=sys.argv[1]
num2=sys.argv[2]
# 结果
sum = int(num1) + int(num2)
print(sum)

通过Runtime调用Python程序与直接执行Python程序的效果是一样的,可以在Python中读取传递的参数,也可以在Java中读取到Python的执行结果

2. 通过Jython调用

Jython是Python语言在Java平台的实现

<!--<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython</artifactId>
    <version>2.7.0</version>
</dependency>-->
<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <version>2.7.2</version>
</dependency>
  • 执行python语句
@Test
void executePython() {
    // python语句,打印 Hello world !
    String py = "print('Hello world!')";
    PythonInterpreter interpreter = new PythonInterpreter();
    // 执行 Python 语句
    interpreter.exec(py);
}
// 在Java中执行Python语句,相当于在Java中嵌入了Python程序
// 意义不大
public static void main(String[] args) {
    System.setProperty("python.home", "D:\\jython2.7.0");
    PythonInterpreter interp = new PythonInterpreter();
    // 执行Python程序语句
    interp.exec("import sys");
    interp.set("a", new PyInteger(42));
    interp.exec("print a");
    interp.exec("x = 2+2");
    PyObject x = interp.get("x");
    System.out.println("x: " + x);
}
  • 执行python脚本
@Test
void executePythonFile() {
    // 定义脚本路径
    String path = "D:\\test.py";
    PythonInterpreter interpreter = new PythonInterpreter();
    // 执行脚本文件
    interpreter.execfile(path);
}
  • test.py
print('hello world by file')
  • 动态传参
@Test
void executePythonFunction() {
    PythonInterpreter interpreter = new PythonInterpreter();
    // 指定指定路径下的 python 脚本
    interpreter.execfile("D:\\test.py");
    // 指定需要调用的函数
    PyFunction function = interpreter.get("sendEmail", PyFunction.class);
    // ↓↓↓↓↓↓↓↓ 需要传入的参数 ↓↓↓↓↓↓↓↓
    // 邮件接受者
    PyString receiver = Py.newStringOrUnicode("xxx@qq.com");
    // 邮件主题
    PyString subject = Py.newStringOrUnicode("打个招呼【动态参数】");
    // 邮件内容
    PyString content = Py.newStringOrUnicode("我是Micky哈【动态参数】");
    // 调用
    PyObject pyObject = function.__call__(receiver, subject, content);
    // 打印返回结果
    System.out.println(String.format("result: %s", pyObject));
}
  • test.py 发送邮件
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
# 邮件服务器地址
mail_host = 'smtp.qq.com'
# 邮件服务器用户名
mail_user = 'xxx@qq.com'
# 邮件服务器登录密码(有些是授权码)
mail_pwd = 'xxx'
# 邮件发送者
sender = 'xxx@qq.com'
def sendEmail(receiver, subject, content):
    """
    发送邮件
    :param receiver: 接收者
    :param subject: 邮件主题
    :param content: 邮件内容
    :return:
    """
    message = MIMEText(content, 'plain', 'utf-8')
    # 邮件主题
    message['Subject'] = subject
    # 发送方
    message['From'] = sender
    # 接收方
    message['To'] = receiver
    try:
        # 连接到服务器
        smtp = smtplib.SMTP_SSL(mail_host)
        # 登录服务器
        smtp.login(mail_user, mail_pwd)
        # 发送
        smtp.sendmail(sender, receiver, message.as_string())
        # 推出
        smtp.quit()
        return 'send email success ...'
    except smtplib.SMTPException as e:
        print('error', e)
if __name__ == '__main__':
    # 邮件接受者
    receiver = 'xxx@qq.com'
    # 邮件主题
    subject = '打个招呼'
    # 邮件内容
    content = '我是Micky哈'
    sendEmail(receiver, subject, content)


目录
打赏
0
0
0
0
71
分享
相关文章
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
148 7
|
3月前
|
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
297 61
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
88 14
21个Python脚本自动执行日常任务(2)
21个Python脚本自动执行日常任务(2)
162 7
21个Python脚本自动执行日常任务(2)
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
284 5
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
166 7
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等