返回顶部
首页 > 资讯 > 后端开发 > Python >java使用Runtime执行系统命令遇到的问题
  • 858
分享到

java使用Runtime执行系统命令遇到的问题

2024-04-02 19:04:59 858人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录使用Runtime执行系统命令遇到的问题参数含义下面是实现代码java Runtime.exec() 执行举个例子使用Runtime执行系统命令遇到的问题 java执行系统命令的

使用Runtime执行系统命令遇到的问题

java执行系统命令的工具,Runtime.getRuntime().exec(),这个工具里面的坑还是不少的,大部分网上已经分析了,我遇到一个没有在网上找到的。

首先说一下这个坑,在command中如果参数的内容中有空格、tab、换行符、回车符,就会执行失败,例如:grep "abc def" -r -n ./这是因为exec方法使用的是StringTokenizer对command分割的。

参数含义

  • command:要执行的命令。
  • envp:设置环境变量,值是:环境变量名=环境变量值,例如 JAVA_HOEM=/usr/lib/java1.8
  • dir:设置命令执行的目录

    public Process exec(String command, String[] envp, File dir)
        throws ioException {
        if (command.length() == 0)
            throw new IllegalArgumentException("Empty command");
 
        StringTokenizer st = new StringTokenizer(command);
        String[] cmdarray = new String[st.countTokens()];
        for (int i = 0; st.hasMoreTokens(); i++)
            cmdarray[i] = st.nextToken();
        return exec(cmdarray, envp, dir);
    }

为了解决这个问题我自己写了一个可以自定义分隔符的类。

这个类中的第二个exec可以自定义分割符,但是也有一个需要注意的地方

假如分隔符是“&&” 要执行的命令这样写 : grep &&"abc&&def"&&-r&&-n&&./ 执行也会报错,以为grep后面有个空格,它会把grep加空格当成一个整体作为一个命令执行,就会出现命令找不到,但是报的错误日志如果不注意很容易忽略这个空格,就只能一直苦恼。所以正确的方式就是把所有默认分隔符全都删掉,只用自己的分隔符就可以了。

下面是实现代码


import java.io.File;
import java.io.IOException;
import java.util.StringTokenizer; 
public class GxExec {
    private static GxExec gxExec = new GxExec(); 
    public static GxExec getGxExec() {
        return gxExec;
    }
 
    private GxExec() {} 
    public Process exec(String[] cmdarray, String[] envp, File dir)
            throws IOException {
        return new ProcessBuilder(cmdarray)
                .start();
    }
 
    public Process exec(String command, String delim)
        throws IOException {
        if (command.length() == 0) {
            throw new IllegalArgumentException("Empty command");
        }
 
        StringTokenizer st = new StringTokenizer(command, delim);
        String[] cmdarray = new String[st.countTokens()];
        for (int i = 0; st.hasMoreTokens(); i++) {
            cmdarray[i] = st.nextToken();
            System.out.println(cmdarray[i]);
        }
        return exec(cmdarray, null, null);
    } 
}

java Runtime.exec() 执行

  • Runtime.exec() 不等同于直接执行command line命令!
  • Runtime.exec()很有局限性,对有些命令不能直接把command line里的内容当作String参数传给exec().

比如重定向等命令。

举个例子


javap -l xxx > output.txt

这时要用到exec的第二种重载,即input 参数为String[]:


Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","javap -l xxx > output.txt"});
rm -rf name*
Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","rm -rf name*"});

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java使用Runtime执行系统命令遇到的问题

本文链接: https://lsjlt.com/news/156243.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java使用Runtime执行系统命令遇到的问题
    目录使用Runtime执行系统命令遇到的问题参数含义下面是实现代码java Runtime.exec() 执行举个例子使用Runtime执行系统命令遇到的问题 java执行系统命令的...
    99+
    2024-04-02
  • python执行系统命令的方法
        做为系统工程师来说,经常会用到python脚本去调用一下系统命令,现把经常使用的集中调用方法总结如下:一,os.system(command)在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。...
    99+
    2023-01-31
    命令 方法 系统
  • SVN使用:使用TortoiseSVN遇到提示请执行“清理”命令的解决方法
    前言 作为程序员来说,在团队开发过程中关于代码管理的工具使用并不陌生,比较常用的代码合并管理工具如:Git、SVN等,虽然相关工具的使用并不复杂,但是还是要掌握常用的使用方法,尤其是相关的第三方软件的使用也是极为重要的,而且有时候使用这...
    99+
    2023-10-20
    svn 服务器 运维
  • 解决Java执行Cmd命令出现的死锁问题
    目录问题原因及解决方法方法封装参考问题 之前研究了Java通过执行cmd命令从而触发Android打包的思路,但是发现Android打包成功之后,后面的代码逻辑就不走了(连输出都没有...
    99+
    2024-04-02
  • 如何在Windows中使用PHP执行系统命令?
    在Windows操作系统中,使用PHP执行系统命令可以帮助我们完成各种任务,例如批量操作文件、自动备份等等。但是,由于Windows与Linux操作系统的命令行语法不同,所以在Windows中执行系统命令需要一些不同的技巧。在本文中,我们将...
    99+
    2023-07-01
    path windows shell
  • Linux系统命令行问题如何解决
    解决Linux系统命令行问题的方法有以下几种:1. 检查命令拼写和语法:首先,确保输入的命令拼写正确,并且遵循正确的语法。可以查阅相...
    99+
    2023-09-16
    Linux
  • Go系统遇到的锁问题有哪些
    本篇内容介绍了“Go系统遇到的锁问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!底层依赖 sync...
    99+
    2024-04-02
  • 记录CTF命令执行练习中遇到的几道题(一些PHP命令过滤的绕过方法)
    题目1 if (isset($_GET["Command"]) && $_GET["Command"]) {$command = $_GET["Command"];if (!preg_match("/...
    99+
    2023-10-23
    php linux 开发语言
  • Java中使用Map会遇到哪些问题
    Java中使用Map会遇到哪些问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体内容如下1、“你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的...
    99+
    2023-05-31
    java ava map
  • win8系统使用时遇到的常见问题汇总及解答
    不少电脑爱好者朋友现在都在关注最新微软windows 8系统,根据微软最新官方消息,WIN8系统也将在本月底发布最新消费者预览版,供尝鲜朋友抢先体验WIN8,针对近期不少朋友都常问的一些windows 8问...
    99+
    2022-06-04
    常见问题 系统
  • Python执行Linux系统命令的4种方法
    (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) -> exit_status Execute the command (...
    99+
    2022-06-04
    种方法 命令 系统
  • Python怎么执行Linux操作系统的命令
    这篇文章主要讲解了“Python怎么执行Linux操作系统的命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么执行Linux操作系统的命令”吧!在开发运维脚本过程中,经常需要...
    99+
    2023-06-02
  • 你有没有遇到在Windows上运行Java程序时遇到的问题?
    在使用Windows操作系统时,运行Java程序常常会遇到各种问题。这些问题可能会让你感到困惑和无助,但是不用担心,本文将为你详细介绍如何解决这些问题。 问题一:无法找到Java运行环境 在Windows系统中,Java运行环境需要手动安装...
    99+
    2023-07-29
    linux leetcode windows
  • 如何解决无法执行vbs脚本中遇到的问题
    如何解决无法执行vbs脚本中遇到的问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有网友反映无法执行vbs文件,一般情况下,很多坏孩子用vbs写病毒,所以有时...
    99+
    2023-06-08
  • 常用到的mysql系统命令
    本文主要给大家介绍常用到的mysql系统命令,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下常用到的mysql系统命令吧。desc 表名;  ...
    99+
    2024-04-02
  • java如何使用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令
    这篇文章将为大家详细讲解有关java如何使用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。编写代码之前先来介绍一下...
    99+
    2023-05-30
    java apache
  • 如何使用linux的crontab命令执行其它命令
    这篇“如何使用linux的crontab命令执行其它命令”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2024-04-02
  • linux系统下用.sh文件执行python命令的方法
    目录标准版进阶版1 for循环2 嵌套for循环3 定义变量名4 写if函数总结标准版 假设,在终端要执行的命令是: python main.py 首先在执行目录下创建test.sh(文件名自定义)文件 并在test....
    99+
    2022-07-27
    .sh文件执行命令 Linux运行python shell运行python脚本
  • 使用二进制xtrabackup遇到的问题
    下载好二进制包后,版本为2.4.12,准备使用命令,报错如下 cd xtrabackup ./innobackupex --version innobackupex: error while lo...
    99+
    2024-04-02
  • 使用@ApiModel遇到的问题及解决
    目录@ApiModel遇到的问题1. 习惯2. 遇坑3. 排查4. 解决@ApiModel和@ApiModelProperty版本@ApiModel@ApiModelProperty...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作