【问题标题】:Script works in terminal but not when ran using ProcessBuilder脚本在终端中有效,但在使用 ProcessBuilder 运行时无效
【发布时间】:2014-03-05 01:17:07
【问题描述】:

我正在尝试使用 ProcessBuilder 运行脚本

当我在脚本中导出到 $PYTHONPATH 以允许我将 echo 命令通过管道传输到如下所示的 python 文件中时,就会出现问题:

流程构建器:

ProcessBuilder builder = new ProcessBuilder("sh", "sasa_script.sh");
                builder.redirectErrorStream(true);
                builder.directory(new File("/Users/me/script_location"));               
                Process process = builder.start();

sasa_script.sh:

#!/bin/bash
cd /Users/me/dir_for_tool/
export PYTHONPATH=$PYTHONPATH:/Users/me/dir_for_tool/dir_containing_init.py/
echo $PYTHONPATH
echo -e"This is a sample echo." | python ./bin/classifyFromCmdLine.py

脚本在 mac 终端中完美运行,但使用 ProcessBuilder 运行时会导致错误,要求您运行安装程序或设置 PYTHONPATH(不是 processBuilder 错误,而是脚本错误)

Traceback(最近一次调用最后一次): 文件“./bin/classifyFromCmdLine.py”,第 22 行,在 "(或者将 sasa-tool 目录添加到 PYTHONPATH,即 export PYTHONPATH=)?") ImportError:您是否尝试运行 '.设置.env'? (或者将sasa-tool目录添加到PYTHONPATH,即export PYTHONPATH=)?

我也在回应 PYTHONPATH,这表明在该命令之后设置了正确的路径。

所以基本上我只是想知道 Process builder 的不同之处在于在运行命令之前导出无法找到 PYTHONPATH 以及如何解决此问题。谢谢。

【问题讨论】:

    标签: java python bash processbuilder


    【解决方案1】:

    当您登录到 shell 时,您的 $PYTHONPATH 环境变量会以某种方式设置(可能通过 .bashrc 或类似的配置文件配置)。运行 ProcessBuilder 时,未设置此环境变量。您可以将 PYTHONPATH 硬编码到脚本中,也可以尝试使用 source 导入配置并设置变量:

    source /Users/me/.bashrc
    

    【讨论】:

    • 好吧,我完全理解为什么要重置。因此,对您进行硬编码意味着不使用 $PYTHONPATH 位并做更多类似的事情:export PYTHONPATH="/Users/me/dir_tool/subDir/ 如果这也有意义的话,我还将尝试编辑我的 bash 配置文件以添加它?感谢您的帮助。
    • 是的,这就是我所说的硬编码。
    • 不幸的是,当它被硬编码时,它会给出相同的输出,但由于这只是一个测试项目,我想我现在可能只需要导出 jar。如果我在 IDE 中修复它,我会更新这个问题。感谢您帮助理解问题。
    【解决方案2】:

    尝试将程序实际构建为 exe jar 并从终端运行它。那么一切都应该共享相同的环境变量。

    【讨论】:

    • 它确实有效!但是为什么它在java中不起作用?显然,我需要更深入地研究 ProcessBuilder 如何运行脚本以及如何使用环境变量。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2012-04-02
    • 2016-09-19
    • 1970-01-01
    • 2017-01-15
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多