2016-05-30 2 views
0
public CGAOperationStatus downloadMetaData() { 
     CGAOperationStatus retCgaOperationStatus = new CGAOperationStatus(); 
     try { 
      createDirectoryIfNeeded("/sure/replication/metadata"); 
      String prepareRsyncCommand = "gsutil -m rsync -d -r gs://" 
        + storeCredentials.getStoreAccount() 
        + "/sure/metadata /sure/replication/metadata'"; 
      Process p = Runtime.getRuntime().exec(prepareRsyncCommand); 
      p.waitFor(); 
     } catch (Exception e) { 
      System.out.print("Exception in downloading metadata from GoogleBucket"); 
      retCgaOperationStatus 
        .setScgaError(CGAError.SCGA_EXCEPTION_OCCURRED); 
      ExceptionHandler.logException(logger, e); 
      retCgaOperationStatus.setErrorMessage(e.getMessage()); 
     } 
     return retCgaOperationStatus; 
    } 

Я установил и Gcloud SDK на Linux машине и я пытаюсь запустить GSUtil команду из Jar File и моя баночка выполнена из какой-либо внешней программы над ssh. Но это просто не работает.Как загрузить Bashrc в Java программы и выполнить команду

Если я выполняю ту же команду вручную, она отлично работает. Может быть, потому что .bashrc загружается, когда я запускаю команду.

Как я могу сделать то же самое из java.

ответ

0

Вы должны использовать String [] вместо простой строки в качестве параметра в вызове Runtime.

Runtime.getRuntime().exec(new String[]{"gsutil", "-m", "rsync", "-d", "-r", "gs://"+ storeCredentials.getStoreAccount(), "/sure/metadata /sure/replication/metadata'"}); 
+0

Не работает, я сделал некоторые изменения, как удар Runtime.getRuntime(). Exec (новый String [] { "GSUtil", "-m", "Rsync", "-d", "-r" , "gs: //" + storeCredentials.getStoreAccount() + "/ sure/metadata", "/ sure/replication/metadata"} – Dipak

+0

Извините, я забыл, что это программа python. Вы должны вставить «python» в качестве первой записи в ваш массив: 'new String [] {" python "," gsutil ", ...' – Frank

+0

Все еще не работает :( – Dipak

Смежные вопросы