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.
java processbuilder
add a comment |
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.
java processbuilder
2
1) Perhaps output is printed tostderr
, notstdout
. Addbuilder.redirectErrorStream(true)
before callingstart()
. --- 2) Don't callp.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
add a comment |
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.
java processbuilder
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
java processbuilder
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 tostderr
, notstdout
. Addbuilder.redirectErrorStream(true)
before callingstart()
. --- 2) Don't callp.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
add a comment |
2
1) Perhaps output is printed tostderr
, notstdout
. Addbuilder.redirectErrorStream(true)
before callingstart()
. --- 2) Don't callp.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
add a comment |
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.
add a comment |
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.
add a comment |
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.
add a comment |
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.
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.
answered Nov 12 at 20:21
Aubin
11.1k63964
11.1k63964
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
2
1) Perhaps output is printed to
stderr
, notstdout
. Addbuilder.redirectErrorStream(true)
before callingstart()
. --- 2) Don't callp.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