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

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

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

我已经看过Process.run和Process.start,但显然它们不是这样运行的

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

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

//interactive.dart
导入“dart:io”;
main(){
var input=stdin.readLineSync();
打印(input.toUpperCase());
}
它使用
stdin
从命令行读取输入。然后,它使用常规的
print()
输出处理结果

非交互式脚本可以使用以下方式生成和驱动:

导入'dart:convert';
导入“dart:io”;
main(){
Process.start(“dart”,[“interactive.dart”]),然后((Process){
process.stdin.writeln(“这是输入”);
UTF8.decoder.fuse(新的LineSplitter()).bind(process.stdout).listen((行){
打印(行);
});
});
}

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

谢谢,我将查看并报告-看起来很有趣。