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

感谢百万,埃里克

===============>>#1 票数:0 已采纳

由于我不知道您所用的SCM.exe到底是什么,所以我只回答抽象意义上的处理输入/输出重定向要求的内容。 我进一步假设您正在通过System(“ ...”)使用所需的任何参数来调用SCM.exe,这是您无法传递任何进一步输入(被调用进程的stdin)的地方。

相反,您需要能够在收到密码请求后将其传递到其他进程的标准输入,这是通过使用经典意义上的管道来解决的(因为您大概在Windows上使用YMMV)。 更一般而言,您正在处理非常简单的IPC案例。

在Java中,您可以使用ProcessBuilder [1]找到合适的解决方案(尽管我自己从来没有做过-为此,我会使用比Java更简单的方法,但我离题了……)。

解决方案的概要为:

  1. 调用该流程,将其输入和输出作为调用方java流程的输出/输入流进行处理。
  2. 读取过程的输出,直到询问密码
  3. 输入密码
  4. 根据需要进行。

如果需要进一步说明,则可能需要提供有关您的方案的更多详细信息。

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

===============>>#2 票数:0

公共类测试{公共静态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();
    }
}

  ask by Eric Zhu translate from so

未解决问题?本站智能推荐:

4回复

跨Java进程共享对象

我正在从主应用程序执行另一个JVM(java.exe)。 有什么方法可以与新创建的进程(创建时或创建后)共享一个对象(相当大的对象)。 现在,我希望sO对象可用于proc对象表示的进程 ProcessBuilder是否为此提供任何实用程序?
1回复

如何通过ProcessBuilder用Java调用CUDA C应用程序?

我有一个非常复杂的应用程序,它使用CUDA并用C语言编写。该应用程序仅是命令行,现在我想使用Java Swing构建GUI。 我不想重写C代码,所以我要使用ProcessBuilder对象调用命令行版本。 这样,我可以从中读取消息并在GUI内的控制台上显示。 这是我正在使用的代码:
1回复

如何从Java应用程序运行Java应用程序?

我有两个Java应用程序(1,2),并且想要从应用程序1运行应用程序2。首先,我尝试创建应用程序2的.jar文件,并使用ProcessBuilder运行它。 直到我想在应用程序2中搜索某些东西(缺少包和东西的东西)之前,这种方法一直有效。 然后我想我可以只从应用程序1中的ProcessB
1回复

从Web应用程序执行外部Java程序

我正在尝试从在Tomcat 6,Windows 7、64bit上运行的servlet调用外部Java类文件。 关于这个主题已经有一些话题,但是没有一个真正对我有帮助。 费伊,如果我直接从shell运行它,我就能够成功做到这一点。 我正在使用ProcessBuilder执行这样的命令
1回复

Swing应用程序中的Java运行时问题

我有一个swing应用程序,将从中执行一个jar文件,该文件将在内部进行一些处理。 我的流程如下:1.一个带有main()的Java文件,它加载swing GUI。 通过该GUI,我可以浏览并加载所需的jar文件以执行。 从秋千应用程序我正在加载jar文件为: 当
10回复

从Java执行另一个应用程序

我需要执行一个批处理文件,该文件将执行另一个Java应用程序。 我不在乎它是否成功执行,也不必捕获任何错误。 是否可以使用ProcessBuilder做到这一点? 如果我不捕获错误会带来什么后果? 但是,我的要求只是执行另一个Java应用程序。
1回复

从Java打开和关闭应用程序

我正在尝试使用ProcessBuilder在cmd.exe中启动应用程序,等待它完成然后关闭它。 到目前为止,我尝试了: 它会按预期打开窗口,但不会关闭。 我试过了: 并发送退出命令: 但没有成功,cmd会留下来。 有人可以提出解决方案吗?
3回复

从Java应用程序执行Jar文件

我写了2种方法来尝试从Java应用程序执行Jar文件,但它们都不做任何事情。 Java运行时环境安装在C:驱动器上,默认情况下,其路径指向C:驱动器上的目录。 我要执行的Jar文件位于E:驱动器上。 罐子位置:E:\\ Demo文件夹\\ MyDemo.jar 我尝试使用以下2种
1回复

在Java内部启动外部应用程序

我无法从JavaFX GUI启动应用程序。 我正在使用ProcessBuilder 。 它创建了该过程,但是直到我关闭Java程序,该应用程序才能启动。 是否因为该特定程序正在等待参数或我的代码有问题? 外部应用程序启动,但是直到我关闭该外部程序,才允许与原始应用程序进行任何交互。
4回复

Java ProcessBuilder显示已启动的Java应用程序的控制台?

我有一个Java应用程序,它使用ProcessBuilder启动另一个Java应用程序,如下所示: 现在,这可以正常工作,使用参数val启动了appName,它可以运行并起作用...很好...问题是没有控制台窗口出现... appName确实有很多输出到控制台,我们需要看到它...如何使