通过Java Runtime.exec执行shell命令来调用可执行程序(传参数),一直报错,一定要注意这些问题!

在SpringBoot项目中需要调用外部的可执行程序,该项目运行在Linux环境中,通过Java Runtime.exec来调用可执行程序,碰见很多问题

在Linux中执行以下两个命令,都可以成功调用可执行程序 cprogram

# command 1
bash -c /tmp/test/cprogram arg1 agr2

# command 2
/tmp/test/cprogram arg1 arg2

但在Java中通过Java Runtime.exec来执行shell命令,有不少问题

通过 Runtime.getRuntime().exec(String cmd) 和 Runtime.getRuntime().exec(String[] cmds) 调用

cmd="bash -c /tmp/test/cprogram arg1 arg2"

cmds=new String[]{"bash","-c","/tmp/test/cprogram arg1 arg2"}

报错信息:java.io.IOException: error=2, No such file or directory

cmd="bash -c "/tmp/test/cprogram arg1 arg2""

cmds=new String[]{"bash -c  "/tmp/test/cprogram arg1 arg2""}

报错信息:unexpected EOF while looking for matching `''

-classpath: -c: line 1: syntax error: unexpected end of file

执行 cmd="/tmp/test/cprogram arg1 arg2",终于不报错了,无任何错误日志,但就是没有接收到程序返回结果,发现其实是可执行程序只是返回了结果,没有打印出结果,导致一直没有收到执行结果

如果还存在问题,可以写一个 xxx.sh文件,在shell脚本中写函数,用于执行对应的命令就行,将执行操作交给shell脚本完成

总结:通过Java Runtime.exec执行可执行程序(传参数,打印结果),可以执行命令 

        Java Runtime.exec("/tmp/test/cprogram arg1 arg2")

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值