java 调用linux 脚本并获取返回值
大家好,我是烤鸭:
今天分享下java 调用 shell脚本 并获取返回值。
代码实践
String cmd = "df -h";
StringBuffer sb = new StringBuffer();
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null) {sb.append(line).append("\n");
}
String result = sb.toString();
这个result就是执行cmd后的结果。
&&或者管道 | 导致无法获取结果
String cmd = "cd /root && df -h";
StringBuffer sb = new StringBuffer();
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = br.readLine()) != null) {sb.append(line).append("\n");
}
String result = sb.toString();
脚本改成 包含&&的话,就发现result是个空值。 因为 shell脚本中如果有多个命令,那么在java中使用BufferedReader获取脚本的输出时,只能获取到第一个命令的输出,使用/bin/sh -c则能获取到所有的echo输出。
Process process = Runtime.getRuntime().exec(cmd);
// 修改为
Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", cmd});
同样的情况如果执行带 sudo 的命令,而报权限问题,很有可能也是这个问题。
比如这个shell,sudo只能覆盖到 && 之前
sudo cd /data/aaa && nohup java -jar test.jar
利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行
sh -c sudo cd /data/aaa && nohup java -jar test.jar
java 调用linux 脚本并获取返回值相关推荐
- 使用java运行Python脚本并获取返回值
java运行Python脚本并获取返回值 java运行Python脚本并获取返回值 使用runtime类实现在java中运行Python脚本,话不多说,直接上代码 java运行Python脚本并获取返 ...
- python 调用控制台并获取返回结果_Java调用Python脚本并获取返回值
在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...
- python执行linux命令返回结果_Python中调用Linux命令并获取返回值
方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于she ...
- Python中调用Linux命令并获取返回值
方法一.使用os模块的system方法: os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于sh ...
- bat调用python脚本并获取返回值_python生成bat脚本,并且执行bat脚本
# -*- coding: UTF-8 -*- # 命名方式为表名_操作_字段 import os import tempfile import connectDB from controller i ...
- shell传参python脚本和获取返回值的探索方式
一.python脚本 1.情况1:正常return 文件名test1.py #无参数有返回值的函数 def Have_return():return 55if __name__ == '__main_ ...
- oracle存储过程没有返回值,Java调用Oracle存储过程(无返回值)
无返回值: 1:创建存储过程 此存储过程向表中插入一条数据 create or replace procedure demo_procedure(id varchar2,name varchar2,a ...
- java后台发送请求并获取返回值(续)
在java后端发送请求给另一个平台,从而给前端实现 "透传"的过程中,出现:数据请求到了并传到了前端,但是控制台打印时中文显示Unicode码而前端界面中中文显示不出来!!!开始怀 ...
- java调用node脚本并获取输出,Node.js用readline模块实现输入输出
什么是Readline Readline是Node.js里实现标准输入输出的封装好的模块,通过这个模块我们可以以逐行的方式读取数据流.使用require("readline")可以 ...
最新文章
- OpenCV下车牌定位算法实现代码
- rabbitmq可靠发送的自动重试机制 --转
- javer的表结构设计
- MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库
- 设计模式 之 设计的 六大原则(1)单一职责原则
- cloud 部署_使用Google Cloud AI平台开发,训练和部署TensorFlow模型
- orb-slam2在PC和ARM上运行
- 安卓应用安全指南 4.7 使用可浏览的意图
- https防止注入_【缺陷周话】第40期:JSON 注入
- [NVIDIA] Ubuntu 16.04 安装 nvidia-384 + cuda-9.0
- php 字符串方法名,PHP使用字符串名称调用类的方法是什么
- 艺术名家|翰墨异彩“三分书”——访知名书法家蔡爱军
- 图像分割(语义分割)的局限以及解决方法
- 如何使用EasyNVR+CDN突破萤石云在直播客户端数量上的限制,做到低成本高性价比的直播
- 卡塔尔世界杯——你认为今年谁会是冠军?
- 分而治之 (25 分)
- [CQOI2009]循环赛[HNOI2013]比赛
- 天地图聚合 java_关于天地图的瓦片下载
- 12306采用Pivotal GemFire分布式解决方案 解决尖峰高流量并发问题
- OCXO、VCXO、TCXO、DCXO、SPXO
热门文章
- react学习(32)----onref
- [vue] 分析下vue项目本地开发完成后部署到服务器后报404是什么原因呢?
- [vue] 如何在子组件中访问父组件的实例?
- [css] 为什么说css中能用子代选择器的时候不要用后代选择器?
- 前端学习(2029)vue之电商管理系统电商系统之timeline组件
- 前端学习(1868)vue之电商管理系统电商系统之登录退出实现表单的预先认证
- 前端学习(1485):restful接口规则
- shiro学习(22):动态添加验证规则2
- 第九十二期:多少程序员注意到了「中台」的背面?
- 第五十五期:区块链将在2020年实现的重大改变