簡體   English   中英

從Java調用Python腳本時出現Python ImportError

[英]Python ImportError when calling Python script from Java

首先,有一個類似的問題在這里是不是曾經真正解決。

我有一個要從Java代碼中執行的Python腳本。 當我自己運行Python腳本時,它可以正常工作。 當我嘗試從Java 進程執行它時,出現了ImportError:

Traceback (most recent call last):
  File "address_to_geocode.py", line 3, in <module>
    from omgeo import Geocoder
ImportError: No module named omgeo

根據鏈接問題的建議,我在Python導入部分中為模塊添加了直接路徑,以確保解釋器知道在哪里查看,但仍然無法正常工作:

import sys, os
sys.path.append('/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/omgeo')
from omgeo import Geocoder

我的下一個步驟是從bash腳本調用python腳本(同樣,它可以獨立工作),但是當我從Java調用bash腳本時,同樣的錯誤仍然存​​在。 因此,問題似乎就在Java的末端。 這是我的Java代碼:

    Process p = runner.exec("python address_to_geocode.py");

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    String stdReader = null;
    //Read output of command:
    while((stdReader = stdInput.readLine())!=null) {
        System.out.println(stdReader);
    }

    //Read any command errors:
    while((stdReader = stdError.readLine())!=null) {
        System.out.println(stdReader);
    }
    p.waitFor();

我的Java代碼有什么問題嗎?或者這是一個bug? 我感謝任何指示。

我解決了 看起來ProcessBuilder不僅需要python文件本身的完整路徑,還需要python的完整路徑:

ProcessBuilder("/Library/Frameworks/Python.framework/Versions/2.7/bin/python",absolute_file_path);

這樣就解決了問題。

查找您的python bin位置

 $ cat ~/.bash_profile

Java代碼

 ProcessBuilder pb = new ProcessBuilder("/Users/micklin/anaconda2/bin/python","sentiment.py",done.toString());

上面的代碼位於TweetFeeder.java中,因此.py文件可以放在項目根目錄下

暫無
暫無

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

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