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

从另一个进程的输出流中读取

那绪
2023-03-14
问题内容

我想在我的Java程序中读取c-Application的输出流。 iremoted
(可在此处获得:http :
_//osxbook.com/software/iremoted/download/iremoted.c_ )是一个C应用程序,如果按下了Apple
Remote遥控器上的按钮,它将显示诸如“
0x19按下”的单独行。如果我启动改头换面的程序,那么一切都会很好,每当我按下一个按钮时,这些单独的行就会显示在屏幕上。现在,我想在Java应用程序中读取c应用程序的输出流,以处理Java项目中Apple
Remote的输入。不幸的是,我不知道为什么 没有重新输入

我用一个简单的HelloWorld.c程序进行了尝试,在这种情况下,程序按预期响应了(打印出HelloWorld)。

为什么它不适用于改头换面的程序?

public class RemoteListener {


public void listen(String command) throws IOException {

    String line;
    Process process = null;
    try {
        process = Runtime.getRuntime().exec(command);
    } catch (Exception e) {
        System.err.println("Could not execute program. Shut down now.");
        System.exit(-1);
    }

    Reader inStreamReader = new InputStreamReader(process.getInputStream());
    BufferedReader in = new BufferedReader(inStreamReader);

    System.out.println("Stream started");
    while((line = in.readLine()) != null) {
        System.out.println(line);
    }
    in.close();
    System.out.println("Stream Closed");
}




public static void main(String args[]) {
    RemoteListener r = new RemoteListener();
    try {
        r.listen("./iremoted"); /* not working... why?*/
        // r.listen("./HelloWorld"); /* working fine */
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

问题答案:

stdout被缓冲,并且如果您不写入屏幕,则不会自动刷新。加:

fflush(stdout);

后:

printf("%#lx %s\n", (UInt32)event.elementCookie,
    (event.value == 0) ? "depressed" : "pressed");


 类似资料:
  • 问题内容: 我有以下脚本: 我从打来电话: 而且效果很好。 但是,当我这样做时: 口译员挂了。我究竟做错了什么?我希望能够多次读写另一个进程,以将一些任务传递给该进程。我需要做些什么? 编辑1 如果使用,则会得到以下信息: 编辑2 我试过冲洗: 和这里: 但它再次挂起。 问题答案: 我相信这里有两个问题在起作用: 1)您的父脚本调用,它将读取所有数据,直到文件结束。但是,您的子脚本会无限循环运行,

  • 问题内容: 我想运行一个系统进程,拦截输出,并在Python脚本中逐行实时地对其进行修改。 我的最佳尝试是等待过程完成后再打印,它是: 该脚本仅每半秒打印一行: 是否有一个简单的解决方案可以实时迭代输出?我必须使用线程吗? 从前,我用Perl编写脚本,这真是小菜一碟: 问题答案: 遍历文件不可避免地将大量内容缓冲-这是所有Python 2. *实现的一个已知问题。它可以按照您在Python 3.1

  • 问题内容: 我想要一个小的“应用程序加载器”程序,该程序可以通过TCP从外部服务器接收其他二进制应用程序文件并运行它们。 我可以通过将传输的文件保存到硬盘上并使用system()调用来运行它来完成此操作。但是,我想知道是否有可能从内存中启动新应用程序而不接触硬盘驱动器。 加载新应用程序后,加载程序应用程序的状态无关紧要。我更喜欢使用C,但是也欢迎使用C ++解决方案。我还要坚持使用标准Linux

  • 问题内容: 我编写了一个简单的Java程序,该程序每5秒就会向std输出一些“ hello”。 然后我编译它并得到一个.class。 我编写了另一个Java程序来运行它并获得输出: 但是它总是打印: 哪里错了?我的操作系统是“ Windows XP”。 问题答案: 到达流的末尾时将返回。 因为您基本上是在忽略此退出指示器并无限循环地循环,所以您得到的只是。 可能的原因是因为该进程已向错误流输出了一

  • 我希望有人会花时间帮助我。我是Java新手,正在上一堂课尝试学习它。我有一个任务,我已经开始和删除了可能30次。我就是不喜欢这个。作业如下: 从txt文件中读取3列整数。一列有学生号,一列是作业的分数,第三列是作业的最大可能分数。(各10分学生5人)。 我必须至少使用1个数组。 列出从作业中获得的总分数,并合计5名学生在10项作业中每个人可能获得的最高分数。然后将学生号、分数、作业的最大可能分数、

  • 问题内容: 问:我怎样才能从读到的一切入的方式是不是一个手工制作的循环用我自己的字节的缓冲区? 问题答案: 编写一个方法来执行此操作,然后从需要该功能的任何地方调用它。番石榴已经在中提供了代码。我敢肯定,几乎所有其他具有“通用” IO功能的库也都有它,但是Guava是我第一个“入门”库。它震撼了:)