用java记录终端输入

用java记录终端输入,java,Java,我正在为我的学校实验室开发一个工具。在这个工具中,学生使用终端,我想提取那里的输入记录作为讲师日志文件。我知道文件的输入输出,到目前为止我已经成功地打开了终端。用这个 类内数据 Process pr; 在功能上 String command= "/usr/bin/xterm"; Runtime rt = Runtime.getRuntime(); try { pr = rt.exec(command); } catch (IOException e1) { e1.prin

我正在为我的学校实验室开发一个工具。在这个工具中,学生使用终端,我想提取那里的输入记录作为讲师日志文件。我知道文件的输入输出,到目前为止我已经成功地打开了终端。用这个

类内数据

Process pr;
在功能上

String command= "/usr/bin/xterm"; 
Runtime rt = Runtime.getRuntime();  
try {
    pr = rt.exec(command);
} catch (IOException e1) {
    e1.printStackTrace();
} 
为了退出终端,我使用,如果条件,因为学生可能还没有打开终端并注销

if(pr!=null)
    pr.destroy();
现在在注销部分,我想退出终端并存储输入日志。
需要一些关于如何获取输入的指针。

我不知道这是否有效,我现在无法测试它,并且很难将代码放入注释中。欢迎反馈

试着把这些代码放在你的注销部分,看看会发生什么

BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
while ((line = input.readLine()) != null) {
          System.out.println(line);
}
input.close();
在Unix和Linux上为您的问题提供了答案:

这样运行程序怎么样:

program > /path/to/file
这会立即将程序的输出重定向到/path/to/file

您可以使用executeString[]cmdarray和您的命令以及参数,将参数添加到流程调用中,因此rt.executecommand,>,path/to/file


如果您希望在终端中获得输出,并将其保存到文件中。一旦数据进入文件,就很容易从文件中读取。

那么您实际上有两个独立的程序?一个是当有人登录打开终端时运行的,另一个是当用户注销时运行的?从你的代码中,你的变量pr似乎控制着这个过程,但我看不到在这些代码之间有任何while循环……它不会导致程序启动终端并立即结束它吗?如果不是太长的话,也许你应该发布所有的代码。不,我有一个GUI,上面有打开终端和注销按钮。我正在事件处理程序中编写。空指针问题不再存在了,我在其他对象中使用了pr,或者不是静态的。它在line=input.readLine处卡住了。我通过分离while循环检查了这一点。我应该先破坏公共关系吗?如果我这样做了,它不会被卡住,但在输出中没有给出任何东西。在控制台打开后,您是否尝试过在控制台中键入内容?虽然我给出的循环基本上是读取控制台的输出,但正如我所说,这只是一个猜测,我所知道的是,我提供的代码将适用于某个进程,就像我的例子中的windows任务管理器,我提取了活动进程列表。我只是猜测它可能在你的控制台上工作。是的,它在那一行被卡住了,所以我想知道为什么我只使用这一行String line=input.readLine;若我先关闭终端,然后注销,然后打印空值,那个么程序就会被卡住