使用 Runtime.getRuntime().exec(command) 时用户向命令行输入;

2024-03-17

我认为这是不可能的,但我一直在使用:

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

在命令行上运行命令,但现在我遇到了一种情况,我正在运行的命令会要求一些用户输入,例如用户名。

这无法通过正在执行的命令的参数来解决,有什么方法可以将用户名传递到同一命令行实例并继续?

- -编辑 - -

我仍然无法让它发挥作用。这些是命令行上的步骤:

C:\someProgram.exe
Login:
Passowrd:

所以我需要在运行时提示时传递登录名和密码。我得到的代码不起作用:

try {
        String CMD = "\"C:\\someProgram\"";
        Scanner scan = new Scanner(System.in);
        ProcessBuilder builder = new ProcessBuilder(CMD);
        builder.redirectErrorStream(true);
        Process process = builder.start();

        InputStream is = process.getInputStream();
        BufferedReader reader = new BufferedReader (new InputStreamReader(is));
        OutputStream out = process.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        String line;
        try {
            while (scan.hasNext()) {
                String input = scan.nextLine();
                if (input.toLowerCase().startsWith("login")) {
                    writer.write("myUsername");
                } else if(input.toLowerCase().startsWith("password")){
                    writer.write("myPassword");
                }
                writer.flush();

                line = reader.readLine();
                while (line != null) {
                    System.out.println ("Stdout: " + line);
                    line = reader.readLine();
                }
                if (line == null) {
                    break;
                }
            }
            process.waitFor();
        }
        finally {;
            writer.close();
            reader.close();
        }
    }
    catch (Exception err) {
        System.err.println("some message");
    }

我尝试过类似的方法: writer.write("my Username\n");

任何帮助,我可以看到 someProgram.exe 被调用并在进程中运行,但它只是挂起。


只需写入 p.getOutputStream() 即可。这会将用户名发送到进程的标准输入,这应该可以完成您想要的操作。

out = p.getOutputStream();
out.write("fooUsername\n".getBytes());
out.flush();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Runtime.getRuntime().exec(command) 时用户向命令行输入; 的相关文章

随机推荐

  • 如何在应用程序退出前执行代码 flutter

    我想检测用户何时退出我的应用程序并执行一些代码 但我不知道如何执行此操作 我尝试使用这个包 https pub dev packages flutter lifecycle state https pub dev packages flut
  • Mac Catalyst 应用程序:如何在不终止应用程序的情况下关闭窗口?

    我正在使用 Mac Catalyst 开发一个应用程序 当用户关闭 Mac 版本上的窗口时 应用程序将终止 可以通过使用以下方法来改变 Cocoa 中的这种行为 applicationShouldTerminateAfterLastWind
  • 打开一对“int”

    一些背景 我正在解析一个会计分类账 其中有account1 and account2 as int类型 每个都是 0 99999 范围内的数字 我有很多组合需要考虑 理想情况下我想使用类似的东西 switch account1 accoun
  • Rails:验证两列(一起)的唯一性

    我有一个Release模型与medium and country列 等等 不应该有releases共享相同的medium country组合 我该如何将其写为 Rails 验证 您可以使用独特性 http guides rubyonrail
  • if 语句中初始化的变量的范围是什么?

    这可能是一个简单的范围界定问题 Python 文件 模块 中的以下代码让我有点困惑 if name main x 1 print x 在我使用过的其他语言中 这段代码会抛出异常 因为x变量是局部的if语句并且不应该存在于它之外 但是这段代码
  • 仅通过 Express 框架对某些 URL 使用 HTTP 基本身份验证

    我有一个使用 Express 框架设计的 Node js 应用程序http 认证 http http auth info模块 如下 var auth require http auth var express require express
  • WPF DataBinding:取消属性更改 - 组合框未对齐

    我有一个带有组合框和文本框的 WPF 表单 两者都数据绑定到对象的属性 更改组合框或文本框输入会更新对象的属性 并且数据绑定会启动并更新 UI 问题是 我实现了一种取消更改的方法 该方法有效 但搞砸了 UI 更新 如果我从组合框进行更改并取
  • C# 中的 Google 地理编码 Json 解析问题

    我的代码运行良好 但我似乎无法到达树的更深部分 我正在尝试拉动经度和纬度 下面的代码将 status 没有问题拉为 OK 在响应的最后 geometry gt location gt lat 和 lng 的语法是什么 这是我的代码 stri
  • WinRT中ListView的项目插入动画

    最近 我开始构建自己的大型 Windows 8 应用商店应用程序 在 UI 方面 我开始复制一些好的 UI 我遇到了一个非常有趣的动画 即在标准邮件应用程序的列表视图中插入新元素 当您单击链时 它会展开并显示链中的所有消息 Here htt
  • 如何创建一个尾递归方法,该方法也可以以非尾递归方式引用自身

    假设我有一种用于长时间运行的计算的机制 可以暂停自己以便稍后恢复 sealed trait LongRunning R case class Result R result R extends LongRunning R case clas
  • 在同构 React 组件中导入 CSS 文件

    我有一个 React 应用程序 其中包含用 ES6 编写的组件 通过 Babel 和 Webpack 进行编译 在某些地方 我想包含具有特定组件的特定 CSS 文件 如中所建议的React webpack 食谱 https christia
  • Rails 6 中的自动加载和 Zeitwerk 模式

    Rails 6 中的 Zeitwerk 模式中是否有任何代码被折旧 class Application lt Rails Application Initialize configuration defaults for originall
  • 执行批量插入 SQLAlchemy 的最佳方法

    我有一张桌子叫products 其中有以下列id product id data activity id 我本质上想做的是复制大量现有产品并更新它activity id并在产品表中创建新条目 例子 我已经有 70 个 Activity id
  • MATLAB 奇怪的“输入参数太多”错误

    对于一个项目 我尝试使用 matlab 调用另一个 m 文件中的函数 然而 它说 没有足够的输入参数 即使我确实传递了我相当确定是足够的输入参数 在 eval square m 中 function f eval square x fitn
  • AWS Cloudwatch 未触发 API 调用

    我试图在任何 API 调用上创建规则触发器以进行创建 但没有取得任何成功 我有另一个规则 每当 ec2 实例运行时就会触发该规则 但该规则不会针对 RunInstances 触发 尽管我在 API 日志中看到带有 RunInstances
  • emacs 跨帧跟随模式

    有没有一种方法可以像在跟随模式中那样获得行为 但可以在单独的框架中跨越多个窗口 我必须处理一些令人讨厌的遗留代码 这些代码有七页砖块 八层深度的嵌套 for 循环 其中有很多 goto 它有助于查看尽可能多的代码 以便充分理解和重写它 而不
  • Symfony2 表单用数据预填充字段

    暂时假设该形式使用了一个虚构的Animal文档对象类来自ZooCollection只有两个属性 名称 和 颜色 symfony2 questions tagged symfony2 我正在寻找一个工作简单愚蠢的解决方案 to pre fil
  • Streambuf到底是什么?我该如何使用它?

    我正在尝试更多地了解 I O 流在 C 中如何工作 但我真的很困惑何时使用什么 到底什么是streambuf 我什么时候使用streambuf 与string an istream or a vector 我已经知道最后三个 但不知道如何s
  • 如何在 Odoo 模板语言中使用 if

    我正在尝试使用与 Django 中相同的功能 div class 在 Odoo 我有 div
  • 使用 Runtime.getRuntime().exec(command) 时用户向命令行输入;

    我认为这是不可能的 但我一直在使用 Process p Runtime getRuntime exec command 在命令行上运行命令 但现在我遇到了一种情况 我正在运行的命令会要求一些用户输入 例如用户名 这无法通过正在执行的命令的参