I created the below method to execute a Linux command:
public void executeGetLogs(){
    try{
        Runtime rt = Runtime.getRuntime();
        String [] commands = {helper.getPythonPath(), helper.getLogsMainScript(), helper.getLogsManagementUrl(), helper.getLogsManagementUrlPrefix(), helper.getLogsManagementUsername(), helper.getLogsManagementPassword(), helper.getLogsNet(), helper.getLogsStorageUrl(), helper.getLogStorageUsername(), helper.getLogStoragePassword()};
        Process proc = rt.exec(commands);
        BufferedReader stdInput = new BufferedReader(new 
                InputStreamReader(proc.getInputStream()));
        BufferedReader stdError = new BufferedReader(new 
                InputStreamReader(proc.getErrorStream()));
        // read the output from the command
        logger.debug("Standard output from execution of get_logs:\n");
        String s = null;
        while ((s = stdInput.readLine()) != null) {
            logger.debug(s);
        }
        // read any errors from the attempted command
        logger.debug("Standard error from execution of get_logs (if any):\n");
        while ((s = stdError.readLine()) != null) {
            logger.debug(s);
        }
    }
    catch(IOException e){
        logger.debug("Execution exception: " + e);
    }
}
The method appears to start working correctly but then fails.
The debug shows the following output:
2017-04-21 12:27:42,391 DEBUG  Standard output from execution of get_logs:
2017-04-21 12:27:44,360 DEBUG  411 new files found
2017-04-21 12:27:44,363 DEBUG  Downloading files...
2017-04-21 12:27:44,446 DEBUG  Standard error from execution of get_logs (if any):
What I would expect to see is
2017-04-21 12:27:44,360 DEBUG  411 new files found
2017-04-21 12:27:44,363 DEBUG  Downloading files...
Downloaded 10 of 447
Downloaded 20 of 447
Downloaded 30 of 447
and so on until Downloaded 447 of 447.
I can also see that nothing gets downloaded.
My command runs when I run it in a terminal.
Is it possible something in the Java causes it to exit? One thing is that it can take a few seconds to process each block of 10. Is it possible the
while ((s = stdInput.readLine()) != null) {
    logger.debug(s);
}
just sees a null because the stdInput hasn't appeared yet so it exits the loop? If so how can I fix this?
 
    