方式一:

Java代码

package com.mybatis.plus.utils;
import cn.hutool.core.lang.Console;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; public class test1 {
public static void main(String[] args) { String[] arguments = new String[] {"python", "D://test.py","9895656"};
try {
Process process = Runtime.getRuntime().exec(arguments);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),
"GBK"));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
//java代码中的process.waitFor()返回值为0表示我们调用python脚本成功,
//返回值为1表示调用python脚本失败,这和我们通常意义上见到的0与1定义正好相反
int re = process.waitFor();
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Python

from enum import Enum
import sys class Solution:
def reverse(self, x: int) -> int:
if x==0:
return 0
strList = []
isPositive = True
if x < 0:
isPositive = False
value = abs(x)
temp = value
while (temp/10.0>0.09):
i = temp%10
strList.append(str(i))
temp = temp//10
join = "".join(strList)
result = int(join)
if result>2147483647:
result=0
if isPositive == False:
result = -result
return result if __name__ == "__main__":
so = Solution()
print("输入参数:"+sys.argv[1])
print(so.reverse(int(sys.argv[1])))



读取配置文件中的数据



Java代码

import com.mysql.cj.log.Log;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; @RestController
@PropertySource({"application.yml"})
@RequestMapping("/camera")
public class CameraController {
@Value("${python.path}")
private String python;
@Value("${python.file}")
private String pythonFile;
@GetMapping("/")
//TODO 修改application.yml中的python地址以及py文件的位置
public Response move() {
try {
//使用String数组保存主要数据 参数一:使用什么平台 参数二:运行的程序位置 参数三:向所要运行的程序中传递参数多个参数写到参数四,参数...
String[] args1 = new String[]{python, pythonFile, "9895656"};
//使用Runtime.getRuntime().exec()使用指定程序运行指定程序
Process pr = Runtime.getRuntime().exec(args1);
//设置BufferedReader读取的编码格式
BufferedReader in = new BufferedReader(new InputStreamReader(
pr.getInputStream(), "GBK"));
String line;
//循环读取行不为空输出
while ((line = in.readLine()) != null) {
System.out.println(line);
}
//关闭流
in.close();
pr.waitFor();
} catch (Exception e) {
e.printStackTrace();
return Response.fail();
}
return Response.success();
} }

application.yml配置文件

转自:https://www.cnblogs.com/guanxiaohe/p/14172018.html

方式二:

此方法需要引入依赖

 <dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.0</version>
</dependency>
import org.junit.jupiter.api.Test;
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; class SamplerApplicationTests {
@Test
public void test() throws IOException {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("D:\\add1.py"); // 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
PyFunction pyFunction = interpreter.get("add", PyFunction.class);
int a = 5, b = 10;
//调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("the anwser is: " + pyobj);
} }

python代码

def add(a,b):
return a + b

参考自:https://www.cnblogs.com/wuwuyong/p/10600749.html

java调用python脚本 并传参(根据配置文件获取python文件地址)的更多相关文章

  1. 【原】Gradle调用shell脚本和python脚本并传参

    最近由于项目自动化构建的需要,研究了下gradle调用脚本并传参的用法,在此作个总结. Pre build.gradle中定义了$jenkinsJobName $jenkinsBuild两个Jenki ...

  2. python脚本文件传参并通过token登录后爬取数据实例

    from bs4 import BeautifulSoup import requests import sys class Zabbix(object): def __init__(self, he ...

  3. python 2 控制台传参,解包,编码问题初探

    python 2 控制台传参,需要从sys模块中导入argv,argv返回的第一个参数当前脚本(script)的文件名,后面是参数,参数个数必须和解包(unpack)时使用的参数个数一致 1.本例子演 ...

  4. Python菜鸟之传参

    Python菜鸟之传参 : 看上面enroll( )函数的调用传参 enroll("twiggy","M",city="上海", age=2 ...

  5. Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    依赖包(附件有下载): 包名 类型 操作系统 luajava-1.1.jar jar ALL libluajava-1.1.so .so linux luajava-1.1.dll .dll wind ...

  6. Python中的传参是传值还是传址?

    传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...

  7. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  8. java调用shell脚本小demo

    复制指定文件cpp.sh: [root@localhost soft]# vim cpp.sh#!/bin/bash name="$1"\cp /home/soft/test/${ ...

  9. 解决:执行python脚本,提示错误:/usr/bin/python^M: 解释器错误: 没有那个文件或目录。

    执行python脚本,提示错误: /usr/bin/python^M: 解释器错误: 没有那个文件或目录. 产生错误原因: \r字符被显示为^M,这时候只需要删除这个字符就可以了. Linux环境下: ...

  10. python paramiko外部传参和内部调用命令的方法

    学习了很久的python,但在工作中使用的时候,却发现不知道怎么传参进入到python中执行,所以这两天就研究 了python args怎么将外部参数传入到python中执行 1.首先使用python ...

随机推荐

  1. 第四章:Django表单 - 3:Django表单字段汇总

    Field.clean(value)[source] 虽然表单字段的Field类主要使用在Form类中,但也可以直接实例化它们来使用,以便更好地了解它们是如何工作的.每个Field的实例都有一个cle ...

  2. 5.使用nexus3配置npm私有仓库

    当我们运行前端项目的时候,常常在解决依赖的时候会加上一个参数npm install --registry=https://registry.npm.taobao.org将源指定为淘宝的源,以期让速度加 ...

  3. 多字段特性及配置自定义Analyzer

    PUT logs/_doc/1 {"level":"DEBUG"} GET /logs/_mapping POST _analyze { "token ...

  4. Docker | 镜像浅析,以及制作自己的镜像

    分层下载,docker image 的核心: 联合文件系统 镜像是什么 镜像就是一个轻量的.独立的软件包.用来打包运行环境和基于运行环境开发的软件.它包含软件运行所需的所有内容(包括代码.运行时.库. ...

  5. GCN的原理及其代码实现

    图数据的特征性质 图像数据是一种特殊的图数据,图像数据是标准的2D网格结构图数据.图像数据的CNN卷积神经网络算法不能直接用在图数据上,原因是图数据具有以下特殊性. 节点分布不均匀:图像数据及网格数据 ...

  6. DDD-领域驱动(二)-贫血模型与充血模型

    贫血模型 一般来说 贫血模型:**一个类中只有属性或者成员变量,没有方法 **!例如 DbFirst 从数据库同步实体过来, -- 对于一个系统刚开始的时候会觉得这时候是最舒服的,但是如果后期系统需要 ...

  7. 细聊.Net Core中IServiceScope的工作方式

    前言 自从.Net Core引入IOC相关的体系之后,关于它的讨论就从来没有停止过,因为它是.Net Core体系的底层框架,你只要使用了.Net Core的时候就必然会用到它.当然关于使用它的过程中 ...

  8. js红宝书学习笔记(一)引用类型

    一.引用类型 ECMAScript中,引用类型是一种数据结构称之为对象定义,,引用对象不同于传统面向对象语言所支持的类和接口等基本结构 创建Object 实例的两种方式: new操作符跟Object构 ...

  9. java集合框架复习----(1)

    文章目录 1 .集合框架思维导图 一.什么是集合 二.collection接口 1 .集合框架思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对 ...

  10. java 新特性之 Stream API

    强大的 Stream API 一.Stream API 的概述 Stream到底是什么呢? 是数据渠道,用于操作数据源(集合.数组等)所生成的元素序列. "集合讲的是数据,Stream讲的是 ...