java shell 交互命令_使用processBuilder执行shell命令并与之交互

小编典典

“(实际上是“ ls”,但它应该以完全相同的方式工作)”

不它不是。因为“ ls”过程在调用后立即返回。另一方面,您的omixplayer是交互式的,将在运行时接受命令。

您要做的是:

创建一个实现Runnable的类,并让该类从prs.getInputStream()中读取。您将需要这样做,因为.read()将阻塞并等待读取新数据。

获取Process对象的输出流(prs.getOutputStream())。您写入OutputStream的所有内容都将从您的omixplayer中读取。不要忘记刷新OutputStream,每个命令的末尾都需要一个“ \ n”来执行。

像那样:

public class TestMain {

public static void main(String a[]) throws InterruptedException {

List commands = new ArrayList();

commands.add("telnet");

commands.add("www.google.com");

commands.add("80");

ProcessBuilder pb = new ProcessBuilder(commands);

pb.redirectErrorStream(true);

try {

Process prs = pb.start();

Thread inThread = new Thread(new In(prs.getInputStream()));

inThread.start();

Thread.sleep(2000);

OutputStream writeTo = prs.getOutputStream();

writeTo.write("oops\n".getBytes());

writeTo.flush();

writeTo.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

class In implements Runnable {

private InputStream is;

public In(InputStream is) {

this.is = is;

}

@Override

public void run() {

byte[] b = new byte[1024];

int size = 0;

try {

while ((size = is.read(b)) != -1) {

System.err.println(new String(b));

}

is.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

PS:请记住,此示例很快就太脏了。

2020-11-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值