2016-05-24 3 views
0

私はbashのを経由して、以下を実行することができ、それが動作します:の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でコマンドを実行しようとすると、それは何もしませんが、それはdoesnのは、いずれかのエラーを投げる。 Javaのexecが何をしているのかを記録する方法はありますか?私はなぜそれが動作していないのか分かりますか?

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()); 
    } 

ここでは、ここにコンソールに出力しますが、エラーは発生しませんでした。

プロセスの終了値は、他の人が同様にこのに実行する場合は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

関連する問題