Java 脚本在终端中工作,但在使用ProcessBuilder运行时不工作
我正在尝试使用ProcessBuilder运行脚本 在脚本中,当我导出到$PYTHONPATH以允许我将echo命令通过管道传输到python文件中时,会出现问题,如下所示: ProcessBuilder:Java 脚本在终端中工作,但在使用ProcessBuilder运行时不工作,java,python,bash,processbuilder,Java,Python,Bash,Processbuilder,我正在尝试使用ProcessBuilder运行脚本 在脚本中,当我导出到$PYTHONPATH以允许我将echo命令通过管道传输到python文件中时,会出现问题,如下所示: ProcessBuilder: ProcessBuilder builder = new ProcessBuilder("sh", "sasa_script.sh"); builder.redirectErrorStream(true); builder.di
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 terminal中运行得很好,但当使用ProcessBuilder运行时,会导致错误,要求您运行安装程序或设置PYTHONPATH(不是ProcessBuilder的错误,而是脚本的错误)
回溯(最近一次呼叫最后一次):
文件“/bin/classifyFromCmdLine.py”,第22行,在
“(或将sasa工具目录添加到PYTHONPATH,即导出PYTHONPATH=)?”)
你试过逃跑吗。setup.env'?
(或者将sasa工具目录添加到PYTHONPATH,即导出PYTHONPATH=)
我还附和了PYTHONPATH,它显示了在该命令之后设置了正确的路径
因此,基本上我只是想知道Process builder有什么不同之处,以至于在运行命令之前导出无法找到PYTHONPATH,以及如何解决此问题。谢谢。当您登录到shell时,$PYTHONPATH环境变量会以某种方式进行设置(可能通过.bashrc或类似的配置文件配置)。运行ProcessBuilder时,未设置此环境变量。您可以将PYTHONPATH硬编码到脚本中,也可以尝试使用source导入配置并设置变量:
source /Users/me/.bashrc
尝试将程序实际构建为exe jar并从终端运行。那么所有东西都应该共享相同的环境变量。好吧,我完全理解它为什么会重置。因此,硬编码意味着不使用$PYTHONPATH位,而是执行类似于:
export PYTHONPATH的操作=“/Users/me/dir\u tool/subDir/
我也会尝试编辑我的bash配置文件来添加它,如果这也有意义的话?谢谢你的帮助。是的,这就是我所说的硬编码。不幸的是,它在硬编码时会给出相同的输出,但由于这只是一个测试项目,我想我现在可能需要处理导出jar的问题。如果我在IDE中修复它,我将更新这个问题。感谢您帮助我们理解这个问题。它确实有效!但是为什么它不能在java中工作呢?显然,我需要深入了解ProcessBuilder如何运行脚本以及如何使用环境变量。谢谢你的回答!