Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 脚本在终端中工作,但在使用ProcessBuilder运行时不工作_Java_Python_Bash_Processbuilder - Fatal编程技术网

Java 脚本在终端中工作,但在使用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运行脚本

在脚本中,当我导出到$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 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如何运行脚本以及如何使用环境变量。谢谢你的回答!