首页 > 系统相关 >JAVA执行Linux命令报错Cannot run program error=2 , No such file or directory

JAVA执行Linux命令报错Cannot run program error=2 , No such file or directory

时间:2023-08-04 21:56:49浏览次数:51  
标签:String buffer error command program 报错 new such final

JAVA执行Linux命令报错Cannot run program error=2 , No such file or directory

酒香不怕巷深 IP属地: 河北 2019.04.22 14:00:00字数 411阅读 6,648

JAVA使用ProcessBuilder运行Linux命令报错: start failed:Cannot run program "xxx" (in directory "xx"): error=2, No such file or directory。

网上找了各种资料都没解决,最后想起azkaban的源码里也是用的ProcessBuilder来执行shell命令,于是翻了一下代码,找到了解决方案,把azkaban里的partitionCommandLine这个方法对command做一下处理,就ok了。

代码如下:

run_command(partitionCommandLine(command), work_path);

/**

*执行命令

*/

public boolean run_command(final String[] command, final File work_path) throws IOException, InterruptedException {

        log.info("COMMAND:" + command);

        List<String> result_list = new ArrayList<>();

        ProcessBuilder hiveProcessBuilder = new ProcessBuilder(command);

        hiveProcessBuilder.directory(work_path);

        hiveProcessBuilder.redirectErrorStream(true);

        Process hiveProcess = hiveProcessBuilder.start();

        BufferedReader std_input = new BufferedReader(new InputStreamReader(hiveProcess.getInputStream(), "UTF-8"));

        BufferedReader std_error = new BufferedReader(new InputStreamReader(hiveProcess.getErrorStream(), "UTF-8"));

        String line;

        while ((line = std_input.readLine()) != null) {

            result_list.add(line);

        }

        while ((line = std_error.readLine()) != null) {

            log.error(line);

        }

        hiveProcess.waitFor();

        if (hiveProcess.exitValue() != 0) {

            log.error("failed to execute:" + command);

            return false;

        }

        log.info("execute success:" + command);

        IOUtils.closeQuietly(std_input);

        IOUtils.closeQuietly(std_error);

        return true;

    }

/**

*对命令进行处理

*/

public static String[] partitionCommandLine(final String command) {

        final ArrayList<String> commands = new ArrayList<>();

        int index = 0;

        StringBuffer buffer = new StringBuffer(command.length());

        boolean isApos = false;

        boolean isQuote = false;

        while (index < command.length()) {

            final char c = command.charAt(index);

            switch (c) {

                case ' ':

                    if (!isQuote && !isApos) {

                        final String arg = buffer.toString();

                        buffer = new StringBuffer(command.length() - index);

                        if (arg.length() > 0) {

                            commands.add(arg);

                        }

                    } else {

                        buffer.append(c);

                    }

                    break;

                case '\'':

                    if (!isQuote) {

                        isApos = !isApos;

                    } else {

                        buffer.append(c);

                    }

                    break;

                case '"':

                    if (!isApos) {

                        isQuote = !isQuote;

                    } else {

                        buffer.append(c);

                    }

                    break;

                default:

                    buffer.append(c);

            }

            index++;

        }

        if (buffer.length() > 0) {

            final String arg = buffer.toString();

            commands.add(arg);

        }

        return commands.toArray(new String[commands.size()]);

    }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12199764/viewspace-2150340/,如需转载,请注明出处,否则将追究法律责任

标签:String,buffer,error,command,program,报错,new,such,final
From: https://www.cnblogs.com/managechina/p/17607121.html

相关文章

  • [maven]java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultMod
    Maven异常环境idea版本:2020.1.3maven版本:3.8.5问题描述在idea中加入maven配置时,idea一直报出java.lang.NoSuchMethodError:org.apache.maven.model.validation.DefaultModelValidator异常异常信息1)Errorinjectingconstructor,java.lang.NoSuchMethodError:org.......
  • kubelet启动报错
    报错启动不成功,查看/var/log/messages报错信息如下:Aug419:12:40k8s-master03kubelet:E080419:12:40.72626421343run.go:74]"commandfailed"err="failedtorunKubelet:validateserviceconnection:CRIv1runtimeAPIisnotimplementedforendpoint\......
  • vCenter 6.7添加主机报错:Unable to push CA certificates and CRLs to host
    故障现象vsan6.7集群添加主机报错:UnabletopushCAcertificatesandCRLstohost解决方法通过web登录vcenter后选择主机和集群>选中最上面的vcenter>配置>设置>高级设置>点击编辑设置中通过过滤器。搜索到vpxd.certmgmt.mode将值从默认的vmca更改为thumbprint保存。不需要重......
  • 30 天精通 RxJS (03):Functional Programming 通用函式
    了解FunctionalProgramming的通用函式,能让我们写出更简洁的代码,也能帮助我们学习RxJS。读者可能会很好奇,我们的主题是RxJS为什么要特别讲FunctionalProgramming的通用函式呢?实际上,RxJS核心的Observable操作观念跟FP的阵列操作是极为相近的,只学会以下几个基本的......
  • Kettle 连接失败 Oracle时报错: Ora-12505
       在使用Kettle连接Oracle数据库时,我们一般会将SERVICE_NAME作为数据库名称进行输入,导致报错:ora-12505;   实际上,Kettle中使用的数据库名是“SID_NAME”而不是PL/SQL的“SERVICE_NAME”。解决方案:1.使用pl/sql连接数据库,执行下列语句,查询“SID_NAME”;selectINSTA......
  • 非root用户解决Rstudo安装R包时报错 libpng16.so.16: cannot open shared object file
    在安装好几个R包的时候都出现了这个报错,看网上的解决方法都是root用户才能干的,我只是普通用户没法办,本来想忍忍就过去了,可是今天装个Deseq2都装不起来,并报错:libpng-config:commandnotfoundread.c:3:17:fatalerror:png.h:Nosuchfileordirectory所以我下定决心一定要......
  • rke up etcd报错: etcd cluster is unhealthy
    问题添加node,rkeup报错:WARN[0197][etcd]host[10.7.0.51]failedtochecketcdhealth:failedtoget/healthforhost[10.7.0.51]:Get"https://10.7.0.51:2379/health":remoteerror:tls:badcertificateWARN[0290][etcd]host[10.7.0.52]failedtoch......
  • Answer Set Programming 回答集编程
    什么是ASP?ASP,全称AnswerSetProgramming中文名叫“回答集编程”。实验室学长要我学ASP的时候,我就去百度查了ASP,结果查到了都是这个:ActiveServerPage,意为“活动服务器网页”。我当时就在想:“这个不对啊,这个搞网站的,应该是旁边组系统集成组的事呀”。果然,此ASP非彼ASP。......
  • 中国电子云 银河麒麟v10yum源报错
    系统默认的yum源报错,访问默认源地址直接返回404,配置以下镜像源###KylinLinuxAdvancedServer10-osrepo###[ks10-adv-os]name=KylinLinuxAdvancedServer10-Osbaseurl=http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/base/$basearch/gpgcheck=0......
  • Undefined symbol HAL_SRAM_Init (referred from lcd.o) 报错无法使用HAL_SRAM_Init
    前言最近在使用HAL库配置FSMC的时候,发现在使用CubeMX生成的fsmc的配置文件,编译不会报错:UndefinedsymbolHAL_SRAM_Init(referredfromlcd.o)而自己移除CubeMX生成的配置文件,一步步自己配置,就会出现上诉报错,并且将stm32f4xx_hal_sram.h文件包括进去后,仍然报错,奇怪的是MDK编......