【问题标题】:Running an interactive Dart program from another Dart program从另一个 Dart 程序运行交互式 Dart 程序
【发布时间】:2013-09-09 15:32:21
【问题描述】:

我有一个相当长的命令行程序,它需要用户输入参数,然后使用这些参数进行处理。我想做的是将程序分成交互式和非交互式。我试图这样做,并打算让非交互式程序“调用”交互式程序并使用结果(参数),基于这些参数进行处理。程序的非交互部分在处理时在控制台上显示结果。我查看了 Process.run 和 Process.start,但显然它们的功能并非如此。还有一个与此类似的问题大约有 12 个月大,所以我认为值得再问一次。

【问题讨论】:

    标签: dart


    【解决方案1】:

    我查看了 Process.run 和 Process.start,但显然它们的功能并非如此。

    Process.start 是你想要的。它可以做你想做的事,但如果你还没有,你必须对异步编程更加熟悉。您将生成进程,然后异步读取和写入生成的进程 stdout 和 stdin 流。

    您的交互式程序可以执行以下操作:

    // interactive.dart
    import 'dart:io';
    
    main() {
      var input = stdin.readLineSync();
      print(input.toUpperCase());
    }
    

    它使用stdin 从命令行读取输入。然后它使用常规的print()输出处理结果。

    非交互式脚本可以生成并驱动它使用类似的东西:

    import 'dart:convert';
    import 'dart:io';
    
    main() {
      Process.start("dart", ["interactive.dart"]).then((process) {
        process.stdin.writeln("this is the input");
    
        UTF8.decoder.fuse(new LineSplitter()).bind(process.stdout).listen((line) {
          print(line);
        });
      });
    }
    

    它使用Process.start 来生成交互式脚本。它使用process.stdin 写入它。要读取结果输出,它必须跳过一些循环来将原始字节输出转换为每一行的字符串,但这是基本思想。

    【讨论】:

    • 谢谢,我会查看并报告 - 看起来很有趣。
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2020-10-07
    相关资源
    最近更新 更多