2011-03-23 32 views
1

我正在为sipp命令行程序编写Java接口。我目前的代码是:从java运行sipp

ProcessBuilder builder = new ProcessBuilder("sipp", "-sn uac", 
       "127.0.0.1"); 
     Map<String, String> environment = builder.environment(); 
     Process javap = builder.start(); 
     InputStreamReader tempReader = new InputStreamReader(new BufferedInputStream(javap.getInputStream())); 
     BufferedReader reader = new BufferedReader(tempReader); 
     while (true){ 
      String line = reader.readLine(); 
      if (line == null) 
       break; 
      System.out.println(line); 
      } 

这对我不适用想,我有sipp环境变量集,所以这不是问题。标准输出是sipp的帮助信息。我究竟做错了什么?另外我想知道,一旦我运行了sipp,是否可以将参数传递给与之关联的processBuilder对象,以便我可以更改调用率?即sipp让用户通过按+, - ,*来更改通话费率,这可能吗?

回答

1

尝试打破了-snuac参数:

ProcessBuilder builder = new ProcessBuilder("sipp", "-sn", "uac", "127.0.0.1"); 

我也想知道,一旦我得到 SIPP的运行是有可能通过 参数与之相关联,因此的ProcessBuilder对象 我可以更改 通话费率?

如果sipp是从标准期待输入,则应该能够抓住一个输出流(javap.getOutputStream())至处理和写入命令给它。但我不知道sipp的任何信息,可以告诉你它是如何工作的。

+0

非常感谢你做了这个诀窍的答案,这些命令的类型是“q”“+”e.t.c.所以如果我从进程中获取outputStream然后执行“String test =”q“; javap.getOutputStream()。write(test.getBytes());”这应该工作正确吗? – maxsap 2011-03-25 13:22:53

+0

@maxsap - 假设“sipp”期望数据来自标准输入数据,那么应该工作得非常类似(我必须对其进行测试才能确定)。您可能还需要在每个输出流之后调用'flush'写。 – 2011-03-25 14:00:12

+0

是的我忘了写flush命令,我试图用这个命令来运行这个过程:ProcessBuilder builder = new ProcessBuilder(path.trim(),“127.0.0.1:5060”,“-sf”,“scenario。 xml“,” - i“,”127.0.0.1“,” - p“,”5050“,”-r“,”1“,” - m“,”1000000“);这是一个标准命令(直接从命令行运行),但是当我尝试运行它时,java会返回null,所以代码退出。这真的很奇怪,因为其他命令可以很好地工作,sipp位于/ usr/bin? – maxsap 2011-03-25 14:25:54