簡體   English   中英

從終端執行的命令,使用ProcessBuilder從Java失敗

[英]Command executed from terminal, failed from Java using ProcessBuilder

我正在嘗試在終端中執行命令。 問題是,當我在終端中執行命令時,它成功了,但是當我從java運行命令時,命令被執行但是,我收到一條錯誤消息,顯示我缺少一些python模塊。

try{

        String[] list = { "python3", "script.py" };
        ProcessBuilder pb = new ProcessBuilder(list);
        pb.directory(
                new File("/home/script"));
        System.out.println("" + pb.directory());
        Process process = pb.start();
        InputStream str = process.getErrorStream();
        InputStreamReader isr = new InputStreamReader(str);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.printf("Output of running %s is:", Arrays.toString(args));
        while ((line = br.readLine()) != null) {
            System.out.println(line);}
        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String ret = in.readLine();
        System.out.println("value is : "+ret);
        process.waitFor();
        process.destroy();

    }catch (Exception ex) {
        ex.printStackTrace();
    }

錯誤消息:

/home/script
Output of running [] is:Traceback (most recent call last):
  File "scraper.py", line 8, in <module>
    from selenium import webdriver
ModuleNotFoundError: No module named 'selenium'
value is : null

PS:當我直接從終端執行命令時,一切正常,我沒有得到丟失的模塊錯誤。

與Java類似,python允許導入其他東西。 該消息告訴您,您的python腳本想要使用模塊selenium ,但無法找到它。

在shell /控制台中手動運行命令時,很可能會有一些特殊的ENV var設置。 因此,請檢查.bashrc或.initrc或其他定義ENV變量的內容。 在unix系統上,鍵入命令env也可能會顯示所有設置。 只需檢查是否設置了env var PYTHONPATH。

由於該調用是從命令行進行的,因此可以肯定,該模塊已安裝在您的系統上。 您唯一的問題是當您通過Java ProcessBuilder調用該腳本時,python無法找到它!

一種解決方案可能是您在腳本中“手動”調整PYTHONPATH。 因此:為PYTHONPATH設置正確的設置,然后將腳本更新為“做正確的事情”。

有關更多詳細信息,請參閱python 文檔

暫無
暫無

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

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