Runtime.exec()和命令行运行结果不一致解决方法

Runtime.exec()和命令行运行结果不一致解决方法

解决方法

Runtime.exec() 并不等于cmd或shell环境 ,后者能执行的命令前者不一定支持。添加命令解释器可以达到与后者相同的效果

// for windows
Runtime.getRuntime().exec("cmd /c " + yourCmd);
// for linux
Runtime.getRuntime().exec("/bin/bash " + yourCmd);

实际问题场景

在程序中使用Runtime.exec()调用C:\mysql8.0\bin\mysqldump -uroot -proot db > E:\tmp\t.sql的时候出现错误。(在cmd中运行正常)

程序

public void test() throws Exception {
    Process pro = Runtime.getRuntime().exec(mysql_dump_cmd);
    int i = pro.waitFor();
    System.out.println(i);
    System.out.println("error stream:");
    System.out.println(IOUtils.toString(pro.getErrorStream()));
}

输出结果

6
error stream:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Couldn't find table: ">"

添加“cmd /c”后成功解决

posted @ 2020-07-03 16:54  9sFresh  阅读(742)  评论(0编辑  收藏  举报