ProcessBuilder not outputting the correct output











up vote
0
down vote

favorite












private void printNumberOfRecords(){
try {
ProcessBuilder builder = new ProcessBuilder(
"/bin/sh", "-c",
"grep", ""target-word"", localFileName, "|", "wc", "-l");
Process p = builder.start();
p.waitFor();
BufferedReader br=new BufferedReader(
new InputStreamReader(
p.getInputStream()));
String line;
while(( line = br.readLine()) != null ) {
System.out.println(line);
}
}
catch( Exception e ) {
e.printStackTrace();
}
}


So I have the following code. The reads a file and counts the number of occurrences of a target word and prints the count. But when I run this function I don't see anything being printed.










share|improve this question




















  • 2




    1) Perhaps output is printed to stderr, not stdout. Add builder.redirectErrorStream(true) before calling start(). --- 2) Don't call p.waitFor() until after you've read the output, otherwise your code may deadlock. --- 3) Use try-with-resources to correctly close the reader.
    – Andreas
    Nov 12 at 20:10

















up vote
0
down vote

favorite












private void printNumberOfRecords(){
try {
ProcessBuilder builder = new ProcessBuilder(
"/bin/sh", "-c",
"grep", ""target-word"", localFileName, "|", "wc", "-l");
Process p = builder.start();
p.waitFor();
BufferedReader br=new BufferedReader(
new InputStreamReader(
p.getInputStream()));
String line;
while(( line = br.readLine()) != null ) {
System.out.println(line);
}
}
catch( Exception e ) {
e.printStackTrace();
}
}


So I have the following code. The reads a file and counts the number of occurrences of a target word and prints the count. But when I run this function I don't see anything being printed.










share|improve this question




















  • 2




    1) Perhaps output is printed to stderr, not stdout. Add builder.redirectErrorStream(true) before calling start(). --- 2) Don't call p.waitFor() until after you've read the output, otherwise your code may deadlock. --- 3) Use try-with-resources to correctly close the reader.
    – Andreas
    Nov 12 at 20:10















up vote
0
down vote

favorite









up vote
0
down vote

favorite











private void printNumberOfRecords(){
try {
ProcessBuilder builder = new ProcessBuilder(
"/bin/sh", "-c",
"grep", ""target-word"", localFileName, "|", "wc", "-l");
Process p = builder.start();
p.waitFor();
BufferedReader br=new BufferedReader(
new InputStreamReader(
p.getInputStream()));
String line;
while(( line = br.readLine()) != null ) {
System.out.println(line);
}
}
catch( Exception e ) {
e.printStackTrace();
}
}


So I have the following code. The reads a file and counts the number of occurrences of a target word and prints the count. But when I run this function I don't see anything being printed.










share|improve this question















private void printNumberOfRecords(){
try {
ProcessBuilder builder = new ProcessBuilder(
"/bin/sh", "-c",
"grep", ""target-word"", localFileName, "|", "wc", "-l");
Process p = builder.start();
p.waitFor();
BufferedReader br=new BufferedReader(
new InputStreamReader(
p.getInputStream()));
String line;
while(( line = br.readLine()) != null ) {
System.out.println(line);
}
}
catch( Exception e ) {
e.printStackTrace();
}
}


So I have the following code. The reads a file and counts the number of occurrences of a target word and prints the count. But when I run this function I don't see anything being printed.







java processbuilder






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 12 at 20:15









Aubin

11.1k63964




11.1k63964










asked Nov 12 at 20:03









Aditya

5141521




5141521








  • 2




    1) Perhaps output is printed to stderr, not stdout. Add builder.redirectErrorStream(true) before calling start(). --- 2) Don't call p.waitFor() until after you've read the output, otherwise your code may deadlock. --- 3) Use try-with-resources to correctly close the reader.
    – Andreas
    Nov 12 at 20:10
















  • 2




    1) Perhaps output is printed to stderr, not stdout. Add builder.redirectErrorStream(true) before calling start(). --- 2) Don't call p.waitFor() until after you've read the output, otherwise your code may deadlock. --- 3) Use try-with-resources to correctly close the reader.
    – Andreas
    Nov 12 at 20:10










2




2




1) Perhaps output is printed to stderr, not stdout. Add builder.redirectErrorStream(true) before calling start(). --- 2) Don't call p.waitFor() until after you've read the output, otherwise your code may deadlock. --- 3) Use try-with-resources to correctly close the reader.
– Andreas
Nov 12 at 20:10






1) Perhaps output is printed to stderr, not stdout. Add builder.redirectErrorStream(true) before calling start(). --- 2) Don't call p.waitFor() until after you've read the output, otherwise your code may deadlock. --- 3) Use try-with-resources to correctly close the reader.
– Andreas
Nov 12 at 20:10














1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










Your code ask Java to wait until the subprocess sh end without reading the stream. When the buffer will be full, the subprocess wait, blocked.



Don't use p.waitFor(); until you read the output. The output stream will be closed when the process end.



To be complete, you have to check the error stream, too.



As Andreas noticed, a try-with-resource will be better.






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53269305%2fprocessbuilder-not-outputting-the-correct-output%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote



    accepted










    Your code ask Java to wait until the subprocess sh end without reading the stream. When the buffer will be full, the subprocess wait, blocked.



    Don't use p.waitFor(); until you read the output. The output stream will be closed when the process end.



    To be complete, you have to check the error stream, too.



    As Andreas noticed, a try-with-resource will be better.






    share|improve this answer

























      up vote
      0
      down vote



      accepted










      Your code ask Java to wait until the subprocess sh end without reading the stream. When the buffer will be full, the subprocess wait, blocked.



      Don't use p.waitFor(); until you read the output. The output stream will be closed when the process end.



      To be complete, you have to check the error stream, too.



      As Andreas noticed, a try-with-resource will be better.






      share|improve this answer























        up vote
        0
        down vote



        accepted







        up vote
        0
        down vote



        accepted






        Your code ask Java to wait until the subprocess sh end without reading the stream. When the buffer will be full, the subprocess wait, blocked.



        Don't use p.waitFor(); until you read the output. The output stream will be closed when the process end.



        To be complete, you have to check the error stream, too.



        As Andreas noticed, a try-with-resource will be better.






        share|improve this answer












        Your code ask Java to wait until the subprocess sh end without reading the stream. When the buffer will be full, the subprocess wait, blocked.



        Don't use p.waitFor(); until you read the output. The output stream will be closed when the process end.



        To be complete, you have to check the error stream, too.



        As Andreas noticed, a try-with-resource will be better.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 12 at 20:21









        Aubin

        11.1k63964




        11.1k63964






























             

            draft saved


            draft discarded



















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53269305%2fprocessbuilder-not-outputting-the-correct-output%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

            ComboBox Display Member on multiple fields

            Is it possible to collect Nectar points via Trainline?