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

标签 java process stream

我想读取 Java 程序中 c 应用程序的输出流。 iremoted(可在此处获取: Link )是一个 C 应用程序,如果按下 Apple Remote 上的按钮,它会输出单独的行,例如“0x19 Pressed”。如果我启动 iremoted 程序,一切都运行良好,每次按下按钮时,这些单独的行都会显示在我的屏幕上。 现在我想读取 Java 应用程序中 c 应用程序的输出流,以处理 Java 项目中 Apple Remote 的输入。 不幸的是,我不知道为什么没有输入被识别

我用一个简单的 HelloWorld.c 程序进行了尝试,我的程序在本例中按预期响应(打印出 HelloWorld)。

为什么它不能与 iremoted 程序一起使用?

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");

关于java - 从另一个进程的输出流读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957337/

相关文章:

java - 无法使用javamail api从hotmail帐户获取未读邮件

javascript - 我希望能够根据角色类别及其阵营选择神灵列表

bash - 启动并监视 shell 脚本中的进程以完成

android - 如何通过 USB 将 Android 应用程序与 PC 上的 C++ 程序连接起来

node.js - 等待完成流的读取请求

java - LibGDX GLSL 应用于后台

java - Postgresql 过程未从 JDBC 调用

process - 计算 Minix 中的进程数

process - 如何使用ansible杀死正在运行的进程?

json - 转换文件完整内容nodejs