簡體   English   中英

使用Runtime.exec向Python進程發送參數的解決方案

[英]The solution to send arguments to Python process using Runtime.exec

我終於解決了這個問題! 現在,我將代碼和注釋粘貼到此處,以幫助他人。

我的示例代碼是計算兩個單詞之間的相似度得分。 在Java中,它向Python發送兩個單詞,在其中查找分數。 然后,Python得到兩個參數並打印它們的相似性分數。 最后,它讀取Java中Python代碼的結果。

Java:

    import java.io.*;

    public class RuntimeTest
    {
    public static void main(String[] args)
    { 
    try 
    {
    Runtime r = Runtime.getRuntime();


    String[] cmd={"/usr/bin/python",
            "/home/parallels/Desktop/.../src/ConceptNetSimilarity.py",
            "cat",
            "dog"}; 

    Process p = r.exec(cmd);

    #exec(String[] cmd) - cmd[0]:path of python-3.x cmd[1]:path of your python code cmd[2],[3]:arguments  
    #if you only invoke python code without arguments, `Process p = r.exec("python path-of-your-code");` instead.    

    p.waitFor();
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = "";
    while ((line = br.readLine()) != null)
    {
        System.out.println(line);
    }
    p.waitFor();
    } 
    catch (Exception e) 
    {
    e.printStackTrace();
    }
    }
    }

蟒蛇:

import sys
import divisi2 
assoc = divisi2.network.conceptnet_assoc('en')
U, S, _ = assoc.svd(k=100)
spread = divisi2.reconstruct_activation(U, S)
print spread.entry_named(sys.argv[1],sys.argv[2])  
#argv=['/home/parallels/Desktop/.../src/ConceptNetSimilarity.py', 'cat', 'dog']

結果:0.819618978389

只是一種感覺,但是..我想你應該有:

print spread.entry_named(sys.argv[1],sys.argv[2])

代替

print spread.entry_named(sys.argv[0],sys.argv[1])

argv [0]是python腳本。

另一方面,我不確定p.getInputStream()是否符合您的意思。

一個好的建議? 獲得良好的Java和Python參考 ,並至少閱讀與您嘗試在此處使用的API相關的內容。 之后,如果您仍然不知道該怎么辦,請回到此處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM