java - 脚本在终端中有效,但在使用 ProcessBuilder 运行时无效

标签 java python bash processbuilder

我正在尝试使用 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 的错误,而是脚本的错误)

回溯(最近一次调用最后一次): 文件“./bin/classifyFromCmdLine.py”,第 22 行,位于 “(或者将 sasa-tool 目录添加到 PYTHONPATH,即导出 PYTHONPATH=)?”) 导入错误:您是否尝试运行 '. setup.env'? (或者将sasa-tool目录添加到PYTHONPATH,即export PYTHONPATH=)?

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

所以基本上我只是想知道进程构建器有什么不同的做法,以便在运行命令之前导出无法找到 PYTHONPATH 以及如何解决此问题。谢谢。

最佳答案

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

source /Users/me/.bashrc

关于java - 脚本在终端中有效,但在使用 ProcessBuilder 运行时无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630945/

相关文章:

java - 在 Android 应用程序中访问 C++ Web 服务

java - 为什么 Apache POI 能够编写超过 255 个字符的超链接,而 XLSXWriter 却不能?

python - 保存数据的最佳方法

linux - 重命名for循环中的变量

linux - 在 bash 脚本中执行 sed 命令

Debian Linux 上的 Java 闪屏闪烁

Java:对象到 byte[] 和 byte[] 到对象转换器( Tokyo Cabinet )

java - 在 Java 中,是否可以从 try catch block 中返回多个值?

bash - 自删除 bash 脚本

python - 重写实例方法的 getattribute 并使用方法输入变量