Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java';谁是BufferedReader?_Java_Linux_Bufferedreader - Fatal编程技术网

如何从Java';谁是BufferedReader?

如何从Java';谁是BufferedReader?,java,linux,bufferedreader,Java,Linux,Bufferedreader,我在树莓皮上运行这个java程序。程序应该运行脚本“hello_pixy”并扫描它打印出来的内容。当我手动运行hello_pixy时,它会正常打印出行(通过C的printf行)。但是当我运行程序时,没有输出任何内容,BufferedReader也没有读取任何行 如果我将脚本替换为类似“ls”的内容,那么BufferedReader将读取并打印出来。有没有一种方法可以将C中的“printf”更改为发送到InputStream(我对C不太了解,从Java的经验来看已经足够了) 我正在执行的代码如下:

我在树莓皮上运行这个java程序。程序应该运行脚本“hello_pixy”并扫描它打印出来的内容。当我手动运行hello_pixy时,它会正常打印出行(通过C的printf行)。但是当我运行程序时,没有输出任何内容,BufferedReader也没有读取任何行

如果我将脚本替换为类似“ls”的内容,那么BufferedReader将读取并打印出来。有没有一种方法可以将C中的“printf”更改为发送到InputStream(我对C不太了解,从Java的经验来看已经足够了)


我正在执行的代码如下:

您正在从头到脚地执行此操作。您必须先读取所有进程的输出,然后调用
waitFor()
。您的方式可能只是死锁,因为进程在生成所有输出之前无法退出,如果您不读取它,它最终将阻塞

注:

  • C语言不是一种脚本语言,编译的程序也不是一个定义为脚本的程序
  • 取决于先前try块中代码成功与否的代码必须位于该try块内。目前,您正在继续处理异常,就好像它们没有发生一样。不要这样写代码

  • 与C无关,特别是考虑到它不是一个“脚本”,而是一个已编译的二进制文件。为什么要尝试从输入流中读取?可能您需要输出stream@IlyaBursov进程的
    InputStream
    是它的标准输出。注意:运行
    sudo
    可能意味着进程正在等待进程。在等待进程完成后,您无法读取进程的标准输出。您需要首先读取,然后
    waitFor
    @ManjinderSinghHanjra在本例中,我们正在与一个进程通信,我们希望读取(输入流)该进程写入(到stdout)的内容。从进程中运行的程序的角度来看,它正在写入标准输出。从Java程序的角度来看,我们是从输入流中读取的。感谢您的回答和提示。起初它不起作用,但我意识到我的路径也不正确。一旦我做了两个修复,它就成功了,谢谢。
        Process process = null;
    
        try {
            process = Runtime.getRuntime().exec("sudo .ss/pixy/build/hello_pixy/hello_pixy");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } //for Windows
    
        try {
            process.waitFor();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
    
        String print = "";
        try {
            while ((line = reader.readLine()) != null) {
                print += line;
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        System.out.println("\nCodescan:\n\n" + print);