【问题标题】:CMD operations through Java通过 Java 进行 CMD 操作
【发布时间】:2016-06-10 06:20:42
【问题描述】:

我正在尝试通过 JAVA 运行一些命令行操作。我的一个命令需要按回车键才能完成。我不知道如何在命令执行过程中通过 java 输入。

    import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CommandLineMethods {
public static String executeCommand(String []command)
{
    StringBuffer output = new StringBuffer();
    Process p;
    try{

                 p=Runtime.getRuntime().exec(command);

        p.waitFor();
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";
        while((line=br.readLine())!=null)
        {
            output.append(line + "\n");
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return output.toString();
}
public static void main(String...args)
{   
    String scriptsPath ="C:\\bip_autochain\\win64_x64\\scripts";
    String scriptName="lcm_cli.bat";
    String scriptArguments="lcmproperty C:\\TestNG_Auto\\resources\\LCMBiar_Import.property";

    String []command = {"cmd.exe", "/c"," cd "+scriptsPath+" && "+ scriptName +" -"+scriptArguments};
    String res = executeCommand(command);
    System.out.println(res);

}

}

运行带有某些参数的脚本的最后一个命令需要按下回车键才能完成。如何做到这一点?

【问题讨论】:

  • 在提示输入时尝试提供\n
  • 不,它没有打印任何东西!它在打印之前等待命令完全执行。但这需要在两者之间输入
  • Press a key with Java的可能重复
  • 这不是重复的,因为它需要在前一个命令中按下键,任何新命令都不会执行,因为程序正在等待前一个命令完成

标签: java cmd


【解决方案1】:

看起来您需要创建一个线程并在其中发送密钥。对于简单的协调,只需让孩子睡觉。

【讨论】:

  • 嗨,如果你能指点我一个例子或者什么会很有帮助的话,我不太擅长线程
【解决方案2】:

您可以在OutputStream 上获取Process 的句柄并以这种方式发送您的命令。可能需要对您的代码进行一些重构,以便您可以在正确的时间发送命令(也许当您在 InputStream 上特别看到某些内容时,但类似这样的内容:

Process process = Runtime.getRuntime().exec(command)
// ... stuff happens, reading the input maybe
OutputStream out = process.getOutputStream();
out.write("\n");
out.close();

Process 交互时有一些注意事项,特别是关于及时读取输出和错误流,以及使用线程以便同时读取它们。请查看这篇文章以获取一些提示:

http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

【讨论】:

  • 我给了 thread.sleep(10000) 以便命令可以在正确的时间到达,但 out.write 方法不将字符串作为输入,它是 int 或字节数组。所以我尝试将“\n”转换为字节数组并将其传递给 out.write 方法。这不起作用,我的程序仍然卡住。
猜你喜欢
  • 2019-10-01
  • 2021-05-18
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多