如何在 Dart 中运行交互式流程?

2024-05-31

下面的测试尝试运行 less pager 命令并返回一次 用户退出。问题是它不等待用户输入,而是 仅列出整个文件并退出。平台:xubuntu 12.04、Dart 编辑器版本:13049。

import 'dart:io';

void main() {
  shell('less', ['/etc/mime.types'], (exitCode) => exit(exitCode));
}

void shell(String cmd, List<String> opts, void onExit(int exitCode)) {
  var p = Process.start(cmd, opts);
  p.stdout.pipe(stdout);  // Process output to stdout.
  stdin.pipe(p.stdin);    // stdin to process input.
  p.onExit = (exitCode) {
    p.close();
    onExit(exitCode);
  };
}

以下 CoffeeScript 函数(使用 Nodejs I/O)有效:

shell = (cmd, opts, callback) ->
  process.stdin.pause()
  child = spawn cmd, opts, customFds: [0, 1, 2]
  child.on 'exit', (code) ->
    process.stdin.resume()
    callback code

我怎样才能在 Dart 中实现这个功能?


约翰有一个关于如何查看用户输入的很好的例子。但没有回答你原来的问题。不幸的是,您的问题与 Dart 的运作方式不符。您拥有的两个示例(Dart 版本和 CoffeeScript/Node.js 版本)执行两种完全不同的操作。

在您的 CoffeeScript 版本中,spawn 命令实际上是创建一个新进程,然后将执行传递给该新进程。基本上,您的程序不与进程交互通信,而是您的用户与生成的进程交互。

在 Dart 中情况有所不同,您的程序正在与生成的进程进行交互。它不会将执行传递给新进程。基本上,您所做的是将新进程的输入/输出通过管道传输到程序本身。由于您的程序没有距终端的“窗口高度”,因此它会立即传递所有信息。你在 dart 中所做的几乎等同于:

less /etc/mime.types | cat

您可以使用进程.start() http://api.dartlang.org/docs/continuous/dart_io/Process.html#start与进程进行交互通信。但与进程交互通信的是您的程序,而不是用户。因此,您可以编写一个 dart 程序,该程序将启动并自动播放“zork”或“adventure”等游戏,或者通过查看进程输出的提示来登录远程服务器。

然而,目前还没有办法简单地将执行传递给生成的进程。如果您想将流程输出传达给用户,然后获取用户输入并将其发送回流程,则需要一个附加层。即使如此,并非所有程序(例如 less)的行为都与从 shell 环境启动时的行为相同。

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

如何在 Dart 中运行交互式流程? 的相关文章

随机推荐

  • 一分钟定期服务

    执行周期性任务的正确方法是什么 我的实现似乎无法正常工作 当屏幕打开并且我正在使用电话时 服务方法会及时完美运行 但是 当手机锁定时 服务会以非常大且随机的间隔运行 例如 10 30 10 32 10 45 10 46 10 49 11 0
  • 过滤任何属性包含值的对象数组

    我想知道根据字符串关键字过滤对象数组的最干净 更好的方法是什么 必须在对象的任何属性中进行搜索 当我打字时lea我想遍历所有对象及其所有属性以返回包含的对象lea 当我打字时italy我想遍历所有对象及其所有属性以返回包含的对象italy
  • 非模板类与模板类的多个定义

    为什么编译器会抱怨多个 cpp 文件中定义的非模板类 但对于其定义在各个 cpp 文件中重复的模板类 通过包含该类的 inl 文件 却没问题 即使类是否在多个 cpp 文件中显式实例化 非模板情况是因为在这种情况下您的程序违反了一个定义规则
  • 检测 mobx observable 何时发生变化

    是否有可能检测到可观察的变化何时发生 例如 假设你有这个 observable myObject id 1 name apples id 2 name banana 随后 随着一些用户输入 这些值会发生变化 我怎样才能轻松检测到这一点 我想
  • 过滤 PHP 中所有类型的空格

    我知道有很多类型的空间 em 空间 en 空间 薄空间 不间断空间等 但是 我提到的所有这些都有 HTML 实体 至少 PHP 的 htmlentities 返回类似的内容 但是 那些没有 HTML 实体的空间怎么办 示例 示例 URL 不
  • 对 Spark 数据集中的数字字符串进行排序

    假设我有以下内容Dataset productCode amount XX 13 300 XX 1 250 XX 2 410 XX 9 50 XX 10 35 XX 100 870 Where productCode is of Strin
  • java中如何上传图片文件

    我想通过单击图像来上传图像文件 就像我们在 Java 的 facebook 中看到的那样 谁能建议我如何做到这一点 我正在使用 GlassFish Server Netbeans ide 6 8 查看 Jakarta Commons Fil
  • 如何为数据源指定特定区域的ACM证书?

    我已经为两个区域 ap northeast 1 和 us east 1 的同一域颁发了 2 个证书 因为我的主服务器位于 ap northeast 1 而 CloudFront 需要 us east 1 中的证书 我想在 us east 1
  • 在react中使用useState hook时设置后立即读取组件状态

    This console log不起作用 它只会将之前的状态值打印为set is async const SomeCompo gt const count set useState 0 const setFun gt console log
  • for 循环内的 Promise 的 setTimeout

    我想做的是这样的 循环数据集合 对于每个数据元素调用 API 等待 Promise 失败或解析 暂停 30 秒 然后对下一个数据元素再次执行此操作 直到没有任何内容可以迭代集合 最后显示 完成 消息 到目前为止 这是我编写的代码 在其他问题
  • 如何在 Odoo 中继承 Mail.Thread AbstractModel 并重写该类的函数?

    我想从 mail thread 抽象类中更改一些内容 所以我继承了mail thread并编写了重写message tracked函数 但它没有调用覆盖函数 只是调用了基本函数 是因为 mail thread 是抽象模型吗 我尝试像 osv
  • 如何从图库中检索图像的 Picasa ID/URL

    我有一个活动 从设备的图库中检索图像并将其上传到服务 现在 出于优化目的 我希望避免上传 Picasa 上的图像 而只存储其 ID 或 URL 以供以后检索 所以我的问题是 如何检索该信息 我的意图代码粘贴在下面并检索图像的 URI Int
  • 如何测试 ClusterIssuer 求解器?

    我正在尝试使用 DigitalOcean 上的 LetsEncrypt 部署带有 SSL 证书的 Kubernetes 集群 我跟着这些说明 https www digitalocean com community tutorials ho
  • 如何解密会话令牌(Next-auth JWT 令牌)

    我正在我的下一个应用程序中控制用户身份验证next auth library 我正在使用credentials provider 首先 我调用返回用户信息的登录端点 然后获取访问令牌并将其放入由next auth callback 这是我的
  • 引起:java.lang.AssertionError:无法删除缓存目录 yourProject\build\kotlin\compileDebugTestingKotlin

    有时会出现此意外消息 处理此问题的唯一方法是重新启动电脑 当电脑再次启动时 转到上述路径并删除该文件 然后再启动 Android Studio 项目 它可以工作一段时间 但后者会再次出现 也许你们中有人知道如何更好地处理这个恼人的问题 Cr
  • express-session:滚动会话过期配置

    所以我在 mongo 商店中使用快速会话 如下所示 app use session secret some secret here saveUninitialized false resave false store new MongoSt
  • 包括 PHPUnit 在内的麻烦

    我想开始为我的代码编写测试 因此我使用以下命令安装了最新的 PHPUnit wget http pear phpunit de get phpunit phar chmod x phpunit phar mv phpunit phar us
  • jQuery / CSS3 动画阴影效果

    所以这个问题可能会被否决 但我认为有人可能会提供帮助 我正在寻找的效果是蓝色块像气球一样上下盘旋 当块上 下移动时 阴影在其下方不断增大和缩小 关于如何编程的任何想法 或者有人知道可以完成的教程 插件吗 你可以使用 jQuery 来完成 或
  • 如何终止手持设备上正在运行的进程?

    我无法再在手持设备上替换旧版本的 exe 从开发机器复制过来 当我尝试这样做时 我得到 Cannot copy Platypus exe The device has either stopped responding or has bee
  • 如何在 Dart 中运行交互式流程?

    下面的测试尝试运行 less pager 命令并返回一次 用户退出 问题是它不等待用户输入 而是 仅列出整个文件并退出 平台 xubuntu 12 04 Dart 编辑器版本 13049 import dart io void main s