【问题标题】:Writing to Windows CMD from Java从 Java 写入 Windows CMD
【发布时间】:2016-12-07 06:13:00
【问题描述】:

我正在尝试能够从 Java 将命令输入到 Windows 上的命令提示符中。我使用 processBuilder,打开命令提示符并获取输出流,但是当我尝试写入时,似乎什么也没发生。我是否需要包含其他内容,还是我的做法都错了?

我知道当我最初启动它时我可以将包括命令在内的参数传递到命令提示符中,但我的目标是能够打开窗口首先,然后与它进行交互其次,不是同时。

我的代码:

    ArrayList<String> commands = new ArrayList<>();
    commands.add("cmd.exe");
    commands.add("/c");
    commands.add("start");

    ProcessBuilder pb = new ProcessBuilder(commands);

    Process p = pb.start();

    BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

    stdin.write("dir");
    stdin.newLine();
    stdin.flush();

我尝试过搜索,但没有找到任何满意的答案。这段代码是我从那次搜索中拼凑出来的。 我的最终目标是能够为 youtube-dl(一个命令行程序)编写用户界面,这样我就可以在这些事情上获得更多经验。我希望用户能够从多个选项中进行选择,然后根据他们的选择执行程序。

【问题讨论】:

  • 事情并非如此。输出流被重定向到您执行的任何程序的标准输入。 cmd.exe shell 直接从“终端”(键盘)读取,不接受标准输入的输入,所以你不能做你想做的事情。
  • 我明白了,谢谢你澄清这个问题。
  • 与 shell 交互非常困难,因为时间和解释旨在供人类消费的输出。这听起来像XY Problem。说明您真正想要完成的工作。
  • 我的最终目标是能够为 youtube-dl(一个命令行程序)编写用户界面,这样我就可以在这些事情上获得更多经验。我希望用户能够从几个选项中进行选择,然后根据他们的选择执行程序。我也将此添加到原始帖子中。

标签: java cmd process outputstream processbuilder


【解决方案1】:

我试图手动执行 youtube-dl 事情,因为 youtube dl 事情是一个使用大量 CMD 命令的自动脚本。

回到主题,使用:

Runtime.getRuntime().exec()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2021-09-25
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多