当前位置: 首页 > 面试题库 >

在Java中打开外壳并与其I / O进行交互

符鸣
2023-03-14
问题内容

我正在尝试打开外壳程序(xterm)并与之交互(编写命令并读取外壳程序的输出)

这是无法使用的代码示例:

public static void main(String[] args) throws IOException {
    Process pr = new ProcessBuilder("xterm").start();
    PrintWriter pw = new PrintWriter(pr.getOutputStream());
    pw.println("ls");
    pw.flush();
    InputStreamReader in = new InputStreamReader(pr.getInputStream());
    System.out.println(in.read());
}

当我执行该程序时,将打开“ xterm”窗口,并且未输入“ ls”命令。仅当我关闭窗口时,我才打印“ -1”,并且从外壳中看不到任何内容

重要-

我知道我可以使用:
Process pr = new ProcessBuilder(“ ls”)。start();

要获得输出,但是我需要打开“ xterm”以用于其他用途

非常感谢


问题答案:

您的问题是xterm进程的标准输入和输出与终端窗口中可见的实际shell不对应。您可能会比直接执行xterm而不是xterm更成功:

Process pr = new ProcessBuilder("sh").start();


 类似资料:
  • 问题内容: 我的Web服务器使用通常的Java I/O和每个连接机制的线程。如今,随着用户的增加(长时间的轮询连接),他们开始屈服。但是,连接大部分处于空闲状态。尽管可以通过添加更多的Web服务器来解决此问题,但我一直在尝试对NIO实现进行一些研究。 我对此有好感。我已经阅读了基准测试,其中使用Linux中新的NPTL库的常规I / O 优于NIO。 通过Java I / O配置和使用最新的NPT

  • 问题内容: 非阻塞TCP / IP S和在NIO帮我处理与小数目的线程许多TCP / IP连接。但是UDP 呢?(我必须承认我对UDP不太熟悉。) 即使UDP发送操作未在阻止模式下运行,它似乎也不会阻止。确实存在因拥堵或类似原因导致阻塞的情况吗?我真的很好奇,是否存在这样的情况以及生产环境中可能存在的情况。 如果实际上并没有阻塞,并且我不打算使用已连接并仅绑定到一个端口,那么使用非阻塞模式和and

  • 我有一个如下所示的文本文件: ...... 我需要读取这个文本文件并将其保存在一个HashMap中,其中奇数行是键,下面的偶数行是值。例如(A,苹果)。我试过下面的代码,它不工作。有人能给我一个提示或建议,告诉我如何才能做到这一点吗?

  • 3.9.1 与 C 进行交互 工具 cgo 提供了对 FFI(外部函数接口)的支持,能够使用 Go 代码安全地调用 C 语言库,你可以访问 cgo 文档主页:http://golang.org/cmd/cgo。cgo 会替代 Go 编译器来产生可以组合在同一个包中的 Go 和 C 代码。在实际开发中一般使用 cgo 创建单独的 C 代码包。 如果你想要在你的 Go 程序中使用 cgo,则必须在单独

  • 我需要有关switch的帮助,这是我需要帮助的代码部分。 在P之后的下一种情况下,我如何才能得到一个“回车”键。我想要的是,如果用户只按了回车键,那么程序将播放另一个回合。我在考虑做字符串。valueOf(kb.nextLine())但这不起作用。 谢谢你的帮助。

  • 本文向大家介绍探索Java I/O 模型的演进,包括了探索Java I/O 模型的演进的使用技巧和注意事项,需要的朋友参考一下 相关概念 同步和异步 描述的是用户线程与内核的交互方式: 同步是指用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行; 异步是指用户线程发起 I/O 请求后仍继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。