2016-05-24 1 views
0

Я могу запустить следующий через Баш и он будет работать:Java среда Exec PSQL каротаж

psql -h <host> -p <port> -d <dbname> -U <username> -w -v username="'user'" -v rid=2 -c '\ir ../../../resources/sql/myFile.sql' 

Когда я пытаюсь запустить команду в Java с помощью следующих, он ничего не делает, но это Безразлично» t также выдает ошибку. Есть ли способ, которым я могу зарегистрировать то, что делает exec на Java, поэтому я могу понять, почему он не работает?

try { 
     String line; 
     log.error("Working Directory = " + 
       System.getProperty("user.dir")); 

     Process p = Runtime.getRuntime().exec("psql -h <host> -p <port> -d <dbname> -U <username> -w -v username=\"'user'\" -v " + 
       "rid=2 -c '\\ir sql/myFile.sql'"); 


     log.error("HERE"); 
     BufferedReader input =new BufferedReader(new InputStreamReader(p.getInputStream())); 

     while ((line = input.readLine()) != null) { 
      log.error(line); 
     } 
     input.close(); 
     log.error("here2"); 
    } catch (Exception e) { 
     log.error("Error occurred" + e.toString()); 
    } 

ЗДЕСЬ и здесь2 распечатайте консоль, но ничего не произошло.

Значение выхода Процесс 1.

ответ

0

В случае, когда другие люди бегут в этом, а также. Я был в состоянии получить более подробную информацию об ошибках, используя следующие:

 InputStream stderr = p.getErrorStream(); 
     InputStreamReader isr = new InputStreamReader(stderr); 
     BufferedReader br = new BufferedReader(isr); 
     System.out.println("<ERROR>"); 
     while ((line = br.readLine()) != null) 
      System.out.println(line); 
     System.out.println("</ERROR>"); 
     int exitVal = p.waitFor(); 
     System.out.println("Process exitValue: " + exitVal); 

Я нашел это в этой статье: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html