从另一个Dart程序运行交互式Dart程序

时间:2013-09-09 15:32:22

标签: dart

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

1 个答案:

答案 0 :(得分:8)

  

我看过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写入它。要读取结果输出,必须跳过一些环节以将原始字节输出转换为每行的字符串,但这是基本的想法。