java调用Python 传递参数

本文介绍了如何在Java程序中调用Python脚本,包括使用Jython库和Runtime.getRuntime()方法。详细步骤包括添加Jython Maven依赖、创建Java类以及通过Java传递参数给Python脚本。示例代码展示了解决方案,并展示了成功调用Python脚本打开浏览器的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

==

Java调用Python程序

最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式。

一、使用Jython架包

因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不支持json。因此,

升级了最新的Jython2.7.0,发现可以支持。因此,要使用更多python库,建议使用更高版本的Jython包。

首先,添加Jython的Maven依赖:

其后,写了一个简单的测试程序:

其后,可以得到如下结果:

二、使用Runtime.getRuntime()执行脚本文件

这种方式和cmd中使用python+文件名的命令调用python程序相同

其中,Python程序如下:

执行结果和Jython执行结果一样。


==

1、安装Eclipse

先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成后就可以在MyDemo中写代码了

2、python脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
import  numpy as np
from  selenium  import  webdriver
 
 
def  main():
     url  =  'https://www.tianyancha.com/login'
     driver  =  webdriver.Chrome()
     driver.get(url)
if  __name__  = =  '__main__' :
     =  np.ones( 3 )
     print (a)
     print ( 'java 调用有第三方库的python脚本成功' )
     main()

  调用了两个三方库,有输出操作和打开浏览器操作

3、MyDemo类的代码(java调用python脚本)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package  test;
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[]{ "python" , "D:\\pyworkpeace\\9_30_1.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();
           }}
     public  void  test(){
         System.out.println( "我的第一个方法C" );
     }
 
}

  

4、运行结果如下所示

不光有打印窗口,而且还弹出了天眼查的浏览器,程序完成后浏览器也就关闭了

5、java动态传递参数

    这次要做的是通过java传递url给python脚本,而python脚本用浏览器打开接收到的url网页。

(1)首先定义一个url参数在java中 ;String url="http://blog.youkuaiyun.com/thorny_v/article/details/61417386";

(2)将参数传递给python;  String[] args1 = new String[] { "python", "D:\\pyworkpeace\\9_30.py", url}; 

java中其他地方完全一样 没有改动

(3)python中需要做一点小变动,重写了一下代码

1
2
3
4
5
6
7
8
9
10
11
import  sys
from  selenium  import  webdriver
 
 
def  main(a):
     driver  =  webdriver.Chrome()   # 打开浏览器
     driver.get(a)   # 浏览器打开指定页面
if  __name__  = =  '__main__' :
     for  in  range ( 1 len (sys.argv)):
         url  =  sys.argv[i]
         main(url)

  其中需要注意的是接收参数从sys.argv[1]开始,sys.argv[0]是python脚本的参数地址,没什么用。最后就大功告成了

复制代码
//这个程序可以调用python脚本,并向python脚本中传递参数

package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class test_1 {
    
    public static void main(String[] args) { 
        try {
           //String a=getPara("car").substring(1),b="D34567",c="LJeff34",d="iqngfao";
           //String[] args1=new String[]{ "python", "D:\\pyworkpeace\\9_30_1.py", a, b, c, d };
           //Process pr=Runtime.getRuntime().exec(args1);
           String url="http://blog.youkuaiyun.com/thorny_v/article/details/61417386";
           System.out.println("start;"+url);
           String[] args1 = new String[] { "python", "D:\\pyworkpeace\\9_30.py", url}; 
           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();
          }
        }
    private static String getPara(String string) {
        // TODO Auto-generated method stub
        return null;
    }


}  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue31313

感谢打赏,继续分享,给您帮忙。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值