【发布时间】: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