为了账号安全,请及时绑定邮箱和手机立即绑定

如何使管道使用Runtime.exec()?

如何使管道使用Runtime.exec()?

开满天机 2019-06-20 15:40:19
如何使管道使用Runtime.exec()?考虑以下代码:String commandf = "ls /etc | grep release";try {     // Execute the command and wait for it to complete     Process child = Runtime.getRuntime().exec(commandf);     child.waitFor();     // Print the first 16 bytes of its output     InputStream i = child.getInputStream();     byte[] b = new byte[16];     i.read(b, 0, b.length);      System.out.println(new String(b));} catch (IOException e) {     e.printStackTrace();     System.exit(-1);}该程序的输出是:/etc:adduser.co当然,当我从shell运行时,它按预期工作:poundifdef@parker:~/rabbit_test$ ls /etc | grep release lsb-release互联网告诉我,由于管道行为不是跨平台的,在Java工厂生产Java的聪明人不能保证管道工作。我该怎么做?我不打算使用Java构造来进行所有的解析,而不是grep和sed,因为如果我想改变语言,我将被迫用该语言重写我的解析代码,这完全是不可能的。如何让Java在调用shell命令时进行管道和重定向?
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

编写一个脚本,执行脚本而不是单独的命令。

管道是外壳的一部分,所以您也可以这样做:

String[] cmd = {"/bin/sh","-c","ls /etc | grep release"};Process p = Runtime.getRuntime().exec(cmd);


查看完整回答
反对 回复 2019-06-20
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

创建一个运行时来运行每个进程。从第一个运行时获取OutputStream,并从第二个运行时将其复制到InputStream中。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 917 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信