java - 无法从Java调用Shell脚本

标签 java spring shell hadoop processbuilder

我正在使用ProcessBuilder从Java调用Shell脚本,但没有任何值(value)。它显示为空结果。

这是我的代码:

package webservice;

import java.io.IOException;
import java.io.InputStream;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/hello")
public class HelloWorldService {

    @GET
    @Path("/{param}/{param2}/{param3}")
    public Response getMsg(@PathParam("param") String bedroom,@PathParam("param2") String bathroom,@PathParam("param3")String area) throws IOException {
        ProcessBuilder pb = new ProcessBuilder("/script/spark-submit.sh");  
        pb.environment().put("a", bedroom);
        pb.environment().put("b", bathroom);
        pb.environment().put("c", area);
        Process p=pb.start();
        InputStream is = p.getInputStream();
        int i =0;
        StringBuffer sb = new StringBuffer();
        while((i=is.read())!=-1)
            sb.append((char)i);
            System.out.println("value of sb:"+sb.toString());
            String a =sb.toString();
            System.out.println("value of a:"+a);
            String[] arr = a.split(" ");
            if (arr != null) 
            {
                System.out.println("predicted value is " + arr[arr.length - 1]);
            }
            String output = "predicted value is " + arr[arr.length - 1];
            return Response.status(200).entity(output).build();
        }
    }

Shell脚本代码
spark-submit --class scalatest.scalatest.scalatest --master local[4] /home/ec2-user/scalatest-0.0.1-SNAPSHOT.jar $a $b $c

最佳答案

尝试使用

Process p=pb.start();
p.waitFor();

看来您的过程从未真正开始

关于java - 无法从Java调用Shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751403/

相关文章:

java - 如何使用 lucene 4.10.3 保存最大长度描述?

java - 为什么最好从方法类的实例中静态调用静态方法?

java - Spring mvc 向其他包隐藏一个包

spring - 通过 Spring redisTemplate.keys() 限制集合返回大小的任何方法

linux - FFmpeg-bash : ffmpeg: command not found

java - 在 Android 谷歌地图中绘制 4K 多段线

java - 如何在Java中取消鼠标点击事件

java - 防止数据库中重复行的最佳方法

linux - Bash 命令行参数通过 ssh 传递给 sed

bash - Shell脚本通用模板