java和python怎么进行交互_java与python 交互(调用API)

java与python 交互为两种情况:

1:直接调用接口(url)

2:调用二者的类

其中第一种不过多赘述:

#Author:morefree

#-*- coding:utf-8-*-

import cv2

import requests

import os

import logging

import glob

def pic(i):

pic_list = glob.glob('D:\\untitled\\book\\demovideo\\video{}.png'.format(i))

print(pic_list)

return pic_list

def javaapi(filename):

url=""

data={"parentId":"","fileCategory":"personal","fileSize":179,"fileName":"video{}.png".format(filename),"uoType":1}

#filesize:指的是文件的字节大小。 filename:指的是你上传之后保存的文件名

# headers={''}

files={'file':('video{}.png'.format(filename),open('D:\\untitled\\book\\demovideo\\video{}.png'.format(filename),'rb'),'image/png',{})}

r=requests.post(url,data,files=files)

print(r.text)

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"

logging.basicConfig(filename='my.log', level=logging.DEBUG, format=LOG_FORMAT)

# def save_pic(filepath="book\img"):

#    if not os.path.exists(filepath):

#        print("create filepath")

#        os.makedirs(filepath)

#        logging.debug("create a path")

#        # filehouzhui = os.path.splitext(pic)[1]

#        # filename = "{}\{}".format(filepath, file_name)

#        #

#        # urllib.request.urlretrieve(pic, filename=filename)

path1='D:\week04c.mp4'#文件名

vc=cv2.VideoCapture(path1)

fps=vc.get(5)

# print(fps)

# print("count",vc.get(7))

# print(type(vc))

logging.info("the video can be read")

count1=1

success =True

time1=1000

try:

while (success):

success,frame=vc.read()

i=1

if (count1% time1 == 0):

cv2.imwrite("video" + "%d.png" % (count1/1000), frame)

logging.debug("save successfully")

# print(count1/1000)

pic(int(count1/1000))

javaapi(int(count1/1000))

# print(i)

count1=count1+1

vc.release()

except:

print("读取失败")

logging.error("the video can not be read")

# return pic_list

#调用接口

# url = ''

# data = {'XXXX':'XXX'}

# headers = {'Connection':'close'}

# s=requests.session()

# r = s.post(url,data = data,headers = headers)

# # print(r.text.encode('utf-8'))

# pic()

# f={

#    "localUrl":(None,'1.jpg'),

#

# }

# r=s.post(url,files=f)

第二种可以用到jython但是版本过于老旧,最近在研究接口的东西发现py4j,他可以完美解决jython的问题,well,首先安装(本人用windows7,anaconda)直接pip install py4j,就ok了,然后在anaconda中的share中找到py4j,以及目录下的jar,导入到eclipse中。一切ok

接下来就是二者的交互了,不过多赘述。

文章部分来源:https://blog.csdn.net/tryto21/article/details/79667107

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java调用Python可以使用Java的ProcessBuilder类来启动Python进程,然后使用Java的标准输入输出流与Python进行交互。 以下是一个简单的Java调用Python的示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class JavaCallPython { public static void main(String[] args) { try { // 创建一个ProcessBuilder对象 ProcessBuilder pb = new ProcessBuilder("python", "hello.py"); // 启动Python进程 Process process = pb.start(); // 获取Python进程的标准输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; // 读取Python进程的输出 while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待Python进程结束 int exitCode = process.waitFor(); System.out.println("Python程序执行完毕,退出码为:" + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们创建了一个ProcessBuilder对象,并将Python解释器的路径和Python脚本的路径作为参数传入。然后,我们通过start()方法启动Python进程,并通过getInputStream()方法获取Python进程的标准输出流。最后,我们读取Python进程的输出,并等待Python进程结束。 在Python脚本中,我们可以通过print()函数将输出发送到标准输出流。例如,以下是一个名为hello.py的Python脚本: ```python print("Hello, world!") ``` 当我们运行Java程序时,它将启动Python进程并调用hello.py脚本。Python进程将输出"Hello, world!",Java程序将读取并打印此输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值