【问题标题】:Interact with terminal application Java or C++与终端应用程序 Java 或 C++ 交互
【发布时间】:2016-02-06 21:04:12
【问题描述】:

我正在尝试制作一个与基于终端的程序交互的 GUI,在本例中是以太坊的 geth 控制台。我可以启动它,但我不知道如何在它运行后发送命令或检索输出。

我尝试过其他程序,例如 Vim,但在我的程序启动后,一切都与我的程序完全分离,我无法给它任何进一步的命令。

在一起搜索 StackOverflow 和匹配解决方案后,这是我想出的,也是我最接近成功的地方。

public static void main(String[] args) throws IOException{
        String[] command = {"gnome-terminal", "-e", "vim temp.txt"};

        Process proc = Runtime.getRuntime().exec(command);

        BufferedReader reader =  new BufferedReader(new InputStreamReader(proc.getInputStream()));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));

        writer.write(":x");
        writer.flush();
        writer.close();
    }
}

这将启动 Vim,创建 temp.txt,但随后 Vim 只是处于打开状态,编写器什么也不做。

我正在尝试做的事情可能吗?

附:我对 C++ 没问题,但我更喜欢 Java,因为我更熟悉它。

【问题讨论】:

  • 通常,交互式程序不会以这种方式运行。您可以读取/写入进程,但只能读取 stdin/stdout/stderr。如果它是一个 GUI 程序,它将取决于操作系统向其发送消息,例如鼠标点击、键盘敲击等。你到底想完成什么?如果您只是想在终端程序中输入命令并读取其输出,只需直接执行这些命令即可。
  • 我正在研究加密货币,这最终将成为以太坊的 GUI,与比特币非常相似。大多数当前可用的 GUI 都存在错误,并且仍在开发中。我的一个队友正在为一个人修复错误,但我正试图从头开始,制作一些专门满足我们需求的东西。
  • “作者什么都不做”是什么意思?写入的字节数是否为零?
  • 我的意思是 vim 没有收到命令。
  • 显然,您需要将- 符号放在您的vim 命令之后。这不是关于 java 的问题,它是关于 linux bash 语法的,你问错了社区。在这里提问:superuser.com 或者甚至在这里:unix.stackexchange.com

标签: java terminal


【解决方案1】:

On the GO-Ethereum Wiki 表示支持:

  • JavaScript 控制台。您必须使用 JavaScript 本身编写应用程序 - 这里可能不是一个选项;
  • JSON RPC 服务器,在这种情况下,您将通过套接字而不是 STDIN/OUT 进行通信;
  • Commandline Options,在这种情况下你会

    String[] command = {"geth", "help" };
    

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 2011-09-25
    • 2014-06-17
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多