1、前言

在与第三方程序或语言进行交互时,需要Java调用

2、使用Runtime的exec函数

在使用时需注意img = sys.argv[1]取下标为1的参数

package com;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

/**

* Java通过Runtime.exec()调用python

*/

public class CallPythonExec {

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static void main(String[] args) {

run();

}

public static void run() {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

String exe = "python";

// String command = "/usr/local/python/videoRec.py";

String command = "D:\\VideoRec\\Python\\videoRec.py";

String param = sdf.format(new Date());

String[] args1 = new String[]{exe, command, param};

System.out.println("result=" + callPython(args1));

}

}, 0, 1000);

}

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;

}

}

/* python 代码

img = sys.argv[1] 参数需下标为1

import sys

def fun(img):

#print("python print="+img)

#print(img)

return img

if __name__ == '__main__':

img = sys.argv[1]

result=fun(img)

print(result)

*/

}

3、使用Jython调用python

在使用时需注意img = sys.argv[0]取下标为0的参数

package com;

import org.python.core.PyFunction;

import org.python.core.PyObject;

import org.python.core.PyString;

import org.python.util.PythonInterpreter;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

/**

* Java通过Jython调用python

*/

public class CallPythonJython {

private static PyFunction pyFunction = null;

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public static void main(String[] args) {

run();

}

public static void run() {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

String result = callPython(new PyString(sdf.format(new Date())));

System.out.println(result);

}

}, 0, 1000);

}

public static String callPython(PyObject... params) {

if (pyFunction == null) {

PythonInterpreter interpreter = new PythonInterpreter();

// interpreter.execfile("/usr/local/python/videoRec.py");

interpreter.execfile("D:\\VideoRec\\Python\\videoRec.py");

// 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型

pyFunction = interpreter.get("fun", PyFunction.class);

}

PyObject pyobj = pyFunction.__call__(params);

return pyobj.asString();

}

/* python 代码

img = sys.argv[0] Jython调用参数需下标为0

import sys

def fun(img):

#print("python print="+img)

#print(img)

return img

if __name__ == '__main__':

img = sys.argv[0]

result=fun(img)

print(result)

*/

}

java调用python库pyd_Java调用Python的两种方式相关推荐

  1. Python加载csv文件的两种方式

    本文主要讲解下Python加载csv文件的两种方式,如果知道如何处理的就不必往下看了! 下面来简单介绍下. 实例中的数据集是kaggle的Digit Recognizer的train.csv文件,数据 ...

  2. Python操作Neo4j图数据库的两种方式

    Python操作Neo4j图数据库的两种方式 前言 1. 用neo4j模块执行CQL ( cypher ) 语句 2. 用py2neo模块通过操作python变量,达到操作neo4j的目的 3. 用p ...

  3. 简单介绍python连接telnet和ssh的两种方式

    本文主要介绍了python连接telnet和ssh的两种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Telnet 连接方式 #!/usr/bin/env p ...

  4. python repair修复功能_详解Python修复遥感影像条带的两种方式

    GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...

  5. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  6. java 生成二维码 QRCode、zxing 两种方式

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  7. java 读取css文件_java文件读取的两种方式

    JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...

  8. Python:实现图片裁剪的两种方式——Pillow和OpenCV

    原文:https://blog.csdn.net/hfutdog/article/details/82351549 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还 ...

  9. Python创建进程、线程的两种方式

    代码创建进程和线程的两种方式 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. ...

  10. Python页面自动化文件上传两种方式

    Python页面自动化测试之文件上传的两种方式 --广州_vivi 最近教学过程,学员项目出现测试上传文件无法执行的情况,分析发现学员项目的上传按钮并不是input按钮,导致无法使用直接定位元素方式进 ...

最新文章

  1. html当作附件发送,MIME以HTML文件作为附件发送电子邮件?
  2. Oracle函数列表速查
  3. 数据驱动车主 App 产品优化,轻松搞定用户体验与转化
  4. 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
  5. 如何通过 C# 自动捕获一个文件的变更?
  6. python假如输入错误重新输入_认识python之输入(4)
  7. LintCode_408 二进制求和
  8. Python常用快捷键整理
  9. 操作系统的目标和作用
  10. 微信小程序:微信公众号申请微信小程序并认证的步骤
  11. 鸟瞰Atlassian认证
  12. 教育部司长:建议开展琴棋书画等校外培训!
  13. 计算机网络练习3|河工|周老师
  14. 【mysql】变量的基本使用
  15. TX2配置RealSense D455相机SDK和ros驱动
  16. AI大模型加持,生成式搜索来了!
  17. 将 vim 外的内容复制并粘贴到 Vim 里使用,如从windows系统复制内容到vim中使用
  18. 大话Linux发展史
  19. 详解各种布隆过滤器原理及使用场景
  20. 如何联系百度CEO兼总裁李彦宏

热门文章

  1. github操作命令
  2. 过程计算机控制综合课程设计,自动化10本 12升《计算机控制综合课程设计》任务书...
  3. linux单次任务调度,go任务调度2(linux的cron调用)
  4. java 11_JAVA 11初体验
  5. python seach_python 正则re.search
  6. php如何传递字符串,如何将PHP字符串传递给Javascript函数调用?
  7. Sereja and Brackets CodeForces - 380C (树状数组+离线)
  8. hihocoder-Week243-hiho字符串
  9. HtmlAgilityPack 使用
  10. Strom小实例,大小写转换