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



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

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

ProcessBuilder:

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/classityFromCmdLine.py",第22行,在"(或者将sasa工具目录添加到PYTHONPATH,即导出PYTHONPATH=)?")ImportError:是否尝试运行"。setup.env?(或者将sasa工具目录添加到PYTHONPATH,即导出PYTHONPATH=)?

我也在呼应PYTHONPATH,它表明在那条命令之后,正确的道路已经设定。

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

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

source /Users/me/.bashrc

尝试将程序实际构建为exe jar并从终端运行。那么所有的东西都应该共享相同的env变量。

最新更新