第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 ProcessBuilder 將值從 Python 腳本返回到 Java?

如何使用 ProcessBuilder 將值從 Python 腳本返回到 Java?

SMILET 2022-09-07 17:07:05
我正在嘗試使用ProcessBuilder將python腳本的返回值獲取到Java中。我期望在Java中具有“這就是我正在尋找的”的值。誰能告訴我下面的邏輯中有什么問題?我正在使用python3,并希望使用java標(biāo)準(zhǔn)庫來完成此操作。test.py 代碼import sysdef main33():    return "This is what I am looking for"if __name__ == '__main__':    globals()[sys.argv[1]]()Java 代碼String filePath = "D:\\test\\test.py";ProcessBuilder pb = new ProcessBuilder().inheritIO().command("python", "-u", filePath, "main33");Process p = pb.start();int exitCode = p.waitFor();BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));String line = "";line = in.readLine();while ((line = in.readLine()) != null){    line = line + line;}System.out.println("Process exit value:"+exitCode);System.out.println("value is : "+line);in.close();輸出Process exit value:0value is : null
查看完整描述

2 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊

當(dāng)您從另一個進(jìn)程生成一個進(jìn)程時,它們只能(主要是)通過其輸入和輸出流進(jìn)行通信。因此,你不能期望 python 中 main33() 的返回值到達(dá) Java,它將僅在 Python 運(yùn)行時環(huán)境中結(jié)束其生命周期。如果你需要把一些東西發(fā)回Java進(jìn)程,你需要把它寫到print()。


修改了 python 和 java 代碼片段。


import sys

def main33():

    print("This is what I am looking for")


if __name__ == '__main__':

    globals()[sys.argv[1]]()

    #should be 0 for successful exit

    #however just to demostrate that this value will reach Java in exit code

    sys.exit(220)

public static void main(String[] args) throws Exception {       

        String filePath = "D:\\test\\test.py";      

        ProcessBuilder pb = new ProcessBuilder()

            .command("python", "-u", filePath, "main33");        

        Process p = pb.start(); 

        BufferedReader in = new BufferedReader(

            new InputStreamReader(p.getInputStream()));

        StringBuilder buffer = new StringBuilder();     

        String line = null;

        while ((line = in.readLine()) != null){           

            buffer.append(line);

        }

        int exitCode = p.waitFor();

        System.out.println("Value is: "+buffer.toString());                

        System.out.println("Process exit value:"+exitCode);        

        in.close();

    }


查看完整回答
反對 回復(fù) 2022-09-07
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊

您過度使用了變量 。它不能既是當(dāng)前的輸出線,也不能是到目前為止看到的所有線。添加第二個變量以跟蹤累積輸出。line


String line;

StringBuilder output = new StringBuilder();


while ((line = in.readLine()) != null) {

    output.append(line);

          .append('\n');

}


System.out.println("value is : " + output);


查看完整回答
反對 回復(fù) 2022-09-07
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號