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”后成功解决