为什么我的curl命令不适用于Java ProcessBuilder API

时间:2016-08-02 03:14:05

标签: java shell curl processbuilder

我想从Java执行以下CURL命令:

  

curl -v -X PUT --data-binary" @ configfile.json" -u username:password -D / tmp / grabbit_headers http:// server:port / grabbit / job

(http://和server ...之间的空格按照堆栈溢出指南插入,但不是我的代码的一部分)

我已经关注

http://alvinalexander.com/java/java-exec-processbuilder-process-1,process2和process3

创建使用ProcessBuilder API执行shell命令的java类。

如果我直接在shell上执行CURL命令,它会工作并产生预期的结果。如果我通过Java类使用完全相同的命令,它执行没有任何错误,exitCode = 0,但不产生预期的结果。

此处的预期结果是使用Grabbit(https://github.com/TWCable/grabbit)将内容从一个Adobe AEM实例迁移到另一个实例。

以下是我的主要方法:

public String processBuilderExample() throws IOException, InterruptedException
{


    // build the system command we want to run
  List<String> commands;
  String result="";      
  /*
   * CURL Commands:
   * curl -v -X PUT --data-binary "@$configpath" -u $username:$password -D /tmp/grabbit_headers $client$GRABBIT_JOB > /tmp/grabbit
   * */
  String curl_command="curl -v -X PUT --data-binary \"@"+this.configpath+"\""+" -u "+this.username+":"+this.password+" -D /tmp/grabbit_headers "+this.client+this.GRABBIT_JOB;

  commands = new ArrayList<String>(Arrays.asList(curl_command.split(" ")));      

  result=runCommand(commands);
  return result;

}

//@Override
public String runCommand(List<String> commands) throws IOException, InterruptedException
{

  // execute the command
  SystemCommandExecutor commandExecutor = new SystemCommandExecutor(commands);
  int result = commandExecutor.executeCommand();

  // get the stdout and stderr from the command that was run
  StringBuilder stdout = commandExecutor.getStandardOutputFromCommand();
  StringBuilder stderr = commandExecutor.getStandardErrorFromCommand();

  StringBuilder finalReturnString=new StringBuilder();
  finalReturnString.append("<br/>STDOUT:<br/>");
  finalReturnString.append(stdout.toString());
  finalReturnString.append("<br/>STDERR:<br/>");
  finalReturnString.append(stderr.toString());

  return finalReturnString.toString();

}

1 个答案:

答案 0 :(得分:0)

使用ProcessBuilder配置重定向。

&#34;&GT;&#34; redirect是shell(sh / bash)的一部分,而不是命令。

有关如何使用流程构建器重定向的信息,请参阅Runtime's exec() method is not redirecting the output

请参阅&> redirection not working correctly有关其无效的原因。