通过JAVA应用程序调用SCM

时间:2014-04-20 14:56:28

标签: java ipc processbuilder

最近我正在尝试编写一个java应用程序来调用SCM.exe来执行代码加载作业。但是,在我通过java成功执行SCM加载命令后,我发现我实际上无法真正下载代码(因为使用命令行,需要在执行SCM加载命令后输入密码)。我是否知道在使用该过程在java中运行SCM后如何输入此密码?如何获取命令行的输出并在命令行中输入内容?

万分感谢 埃里克

2 个答案:

答案 0 :(得分:0)

由于我不知道您的情况下究竟是什么SCM.exe,因此我只回答了抽象意义上的输入/输出重定向要求。我进一步假设您使用System(“...”)所需的任何参数调用SCM.exe,这是您无法传递任何进一步输入的地方(被调用进程的stdin)。

相反,您需要能够在收到密码请求后将其传递给其他进程的stdin,这是通过使用传统意义上的管道解决的(因为您可能是在Windows上,YMMV) 。更一般地说,您正在处理一个非常简单的IPC案例。

在Java中,你可以通过使用ProcessBuilder找到一个合适的解决方案[1](从来没有做过我自己,为了这个目的,我使用的东西比java简单得多,但我离题了......)。

解决方案的大纲是:

  1. 调用该进程,将其输入和输出作为来自调用者java进程的输出/输入流处理。
  2. 阅读您的流程输出,直到您查询密码
  3. 写密码
  4. 根据需要继续进行。
  5. 如果您需要进一步说明,可能需要提供有关您的方案的更多详细信息。

    [1] http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

答案 1 :(得分:0)

公共课考试{     public static void main(String [] args){

    try {
        System.out.println("");
        String commands = "C:/swdtools/IBM/RAD8/scmtools/eclipse/scm.exe load -d C:/users/43793207/test -i test -r eric-repo";  
        // load -d C:/users/43793207/test -i test -r eric-repo 

        test test=new test();
        test.execCommand(commands);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void execCommand(String commands){
    //ProcessBuilder pb = new ProcessBuilder(Command);
    //pb.start();
     String line;

    try {
        //Process pp = Runtime.getRuntime().exec(commands);
        System.out.println(commands);
        Process process = new ProcessBuilder(commands).start();
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);


        while ((line = br.readLine()) != null) {
            System.out.println(line);
                }
    } catch (IOException e) {
        e.printStackTrace();
    }
}