国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java之調(diào)用Python代碼

saucxs / 2032人閱讀

摘要:首先是直接通過(guò)調(diào)用代碼。先寫個(gè)代碼文件,它位于盤中,其完整代碼如下該代碼接受兩個(gè)命令行參數(shù),然后輸出一個(gè)乘法算式。

??對(duì)于一個(gè)數(shù)據(jù)分析方面的工作者來(lái)說(shuō),最熟悉的語(yǔ)言無(wú)疑就是Python了。對(duì)于軟件開發(fā)者而言,Java又是極其重要的工具。那么,一個(gè)很自然的問(wèn)題就是,我們能夠在Java中調(diào)用Python代碼嗎?
??想要在Java中調(diào)用Python代碼,有以下兩個(gè)辦法:

直接通過(guò)Runtime進(jìn)行調(diào)用

調(diào)用Jython

在Java中如果需要調(diào)用第三方程序,可以直接通過(guò)Runtime實(shí)現(xiàn),這也是最直接最粗暴的做法,粒度更加粗糙,效率較高,需要安裝Python軟件。而Jython是Python語(yǔ)言在Java平臺(tái)的實(shí)現(xiàn),可以理解為一個(gè)由 Java 語(yǔ)言編寫的 Python 解釋器,因此,不需要安裝Python軟件。它不僅提供了Python的庫(kù),同時(shí)也提供了所有的Java類,這就使得其有一個(gè)巨大的資源庫(kù)。Jython可以直接調(diào)用Python程序中的指定函數(shù)或者對(duì)象方法,粒度更加精細(xì)。但遺憾的是,Jython運(yùn)行速度并不理想。
??接下來(lái),我們將分別介紹以上兩種調(diào)用方法。
??首先是直接通過(guò)Runtime調(diào)用Python代碼。先寫個(gè)Python代碼文件test_argv.py,它位于D盤中,其完整代碼如下:

import sys

a = sys.argv[1]

b = sys.argv[2]

print("%s * %s = %s"%(a,b,int(a)*int(b)))

該P(yáng)ython代碼接受兩個(gè)命令行參數(shù),然后輸出一個(gè)乘法算式。調(diào)用的Java代碼如下:

package javaCode;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class TestPython {

    public static void main(String[] args) throws Exception {
    
        Scanner input = new Scanner(System.in);
        
        // 在同一行輸入兩個(gè)數(shù)字,用空格分開,作為傳入Python代碼的命令行參數(shù)
        System.out.println("Enter two integers(e.g. 12 34): ");
        String integers = input.nextLine();
        String[] numbers = integers.split(" ");
        
        // 定義傳入Python腳本的命令行參數(shù),將參數(shù)放入字符串?dāng)?shù)組里
        String cmds = String.format("python D://test_argv.py %s %s", 
                                    numbers[0], numbers[1]);

        // 執(zhí)行CMD命令
        System.out.println("
Executing python script file now.");
        Process pcs = Runtime.getRuntime().exec(cmds);
        pcs.waitFor();

        // 定義Python腳本的返回值
        String result = null;
        // 獲取CMD的返回流
        BufferedInputStream in = new BufferedInputStream(pcs.getInputStream());
        // 字符流轉(zhuǎn)換字節(jié)流
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        // 這里也可以輸出文本日志

        String lineStr = null;
        while ((lineStr = br.readLine()) != null) {
            result = lineStr;
        }
        // 關(guān)閉輸入流
        br.close();
        in.close();

        System.out.println(result);

    }
}

從以上代碼中,可以發(fā)現(xiàn),我們往Python代碼中傳入了兩個(gè)命令行參數(shù)(兩個(gè)整數(shù)),通過(guò)Java提供的Runtime環(huán)境讓Python執(zhí)行程序,最后用Java得到在CMD或shell中的輸出流并在Java程序輸出,本質(zhì)上還是Python在處理計(jì)算結(jié)果。其輸出如下圖所示:

??然后我們將演示如何使用Jython來(lái)實(shí)現(xiàn)類似上述程序的功能。
??Jython的MVN倉(cāng)庫(kù)地址為http://mvnrepository.com/arti..., API官方網(wǎng)址為: http://www.jython.org/javadoc/, jar的下載地址為: http://www.jython.org/downloa... . 下載jython-standalone-2.7.0.jar包,并將其加入到Eclipse的Java Build Path中,如下圖:

Java代碼如下:

package javaCode;

import org.python.util.PythonInterpreter;

public class TestPython {
    public static void main(String args[]) {
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.exec("import sys ");
        interpreter.exec("a = input("Enter a:")");
        interpreter.exec("b = input("Enter b:")");
        interpreter.exec("print("%s * %s = %s" %(a, b, a*b))");
    }
}

運(yùn)行以上程序,結(jié)果如下圖:

??至此,我們成功地用以上兩種方法在Java中調(diào)用了Python代碼。
??本次分享到此結(jié)束,歡迎大家交流~~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69023.html

相關(guān)文章

  • Java調(diào)用Python代碼

    摘要:首先是直接通過(guò)調(diào)用代碼。先寫個(gè)代碼文件,它位于盤中,其完整代碼如下該代碼接受兩個(gè)命令行參數(shù),然后輸出一個(gè)乘法算式。 ??對(duì)于一個(gè)數(shù)據(jù)分析方面的工作者來(lái)說(shuō),最熟悉的語(yǔ)言無(wú)疑就是Python了。對(duì)于軟件開發(fā)者而言,Java又是極其重要的工具。那么,一個(gè)很自然的問(wèn)題就是,我們能夠在Java中調(diào)用Python代碼嗎???想要在Java中調(diào)用Python代碼,有以下兩個(gè)辦法: 直接通過(guò)Runt...

    gghyoo 評(píng)論0 收藏0
  • Python有什么好學(xué)的》上下文管理器

    摘要:引上下文管理器太極生兩儀,兩儀為陰陽(yáng)。而最常用的則是,即上下文管理器使用上下文管理器用之后的文件讀寫會(huì)變成我們看到用了之后,代碼沒有了創(chuàng)建,也沒有了釋放。實(shí)現(xiàn)上下文管理器我們先感性地對(duì)進(jìn)行猜測(cè)。現(xiàn)實(shí)一個(gè)上下文管理器就是這么簡(jiǎn)單。 Python有什么好學(xué)的這句話可不是反問(wèn)句,而是問(wèn)句哦。 主要是煎魚覺得太多的人覺得Python的語(yǔ)法較為簡(jiǎn)單,寫出來(lái)的代碼只要符合邏輯,不需要太多的學(xué)習(xí)即可...

    qpwoeiru96 評(píng)論0 收藏0
  • python模塊threading

    摘要:的類行為是的類行為的子集,目前尚不支持優(yōu)先級(jí)線程組,線程無(wú)法銷毀停止暫停恢復(fù)或中斷。表示繼承創(chuàng)建該線程的當(dāng)前線程的屬性。重入鎖,同步原語(yǔ)的一種,可由同一線程多次獲取已持有的鎖。 threading在低級(jí)的_thread模塊上構(gòu)建了更高級(jí)的線程接口。 threading模塊基于Java線程模型設(shè)計(jì)。不過(guò)Java中鎖和條件變量是每個(gè)對(duì)象的基本行為,在python中卻是單獨(dú)的對(duì)象。pytho...

    nanchen2251 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<