Process.run()我想使用或在 dart 中逐个执行一些进程Process.start()
我想显示该过程的详细日志。但问题是,每当我使用它时,run它都会在字符串中提供标准输出,即在进程完成结束时。但我想在进程执行时显示日志。
原因run是返回我们的实例而ProcessResult不是Process,返回的标准输出是 String。
必须stdout.write(cleanProcess.stdout);在以下情况下使用run;
或者
现在,在这种情况下start(),我得到的标准输出是所需的流,但唯一的问题是start返回到Process并且实际上并没有await让进程完成。
可以用来stdout.addStream(buildProcess.stdout);将标准输出显示为流
我试图执行的代码,并显示详细信息。
print("HighSupply Executor : flutter clean");
var cleanProcess = await Process.run('flutter', ["clean", "--verbose"],
workingDirectory: "${flutterFolder.path}");
stdout.write(cleanProcess.stdout); //only getting stdout in one go. needed as stream.
print("HighSupply Executor : flutter pub get");
var pubGetProcess = await Process.run('flutter', //OR can we use start and wait for process to complete
["pub", "get", "--verbose"],
workingDirectory: "${flutterFolder.path}");
stdout.write(pubGetProcess.stdout);
print("HighSupply Executor : flutter build apk");
var buildProcess = await Process.run(
'flutter', ["build", "apk", "--verbose", generatedParams],
workingDirectory: "${flutterFolder.path}");
stdout.write(buildProcess.stdout);
Run Code Online (Sandbox Code Playgroud)
长话短说
无论如何,我可以将标准输出作为流获取Prcocess.run(),或者我们可以等待进程完成后再执行另一个进程,以防万一Process.start()
任何帮助表示赞赏。
编辑:1
正如 @julemand101 建议使用exitcode并等待它在流程完成后返回,它适合我的情况,并且还没有遇到任何问题,但正如他在文档中提到和陈述的那样,这是不可靠的,所以我们寻找更好的具体解决方案。
Rav*_*wal 10
来源:流程
Process.start()用于与代码交互。future 给了我们一个 Process,在它完成启动之后,但是当我们拥有 Process 时,Process 仍然在运行。
当 future 完成时,该进程启动,您的代码可以与该进程交互:写入 stdin、侦听 stdout 等
现在我们可以访问整数流 asProcess.stdout并使用 utf8 解码器解析它。
示例代码:
main() async {
var process = await Process.start('cat', []);
process.stdout
.transform(utf8.decoder)
.forEach(print);
process.stdin.writeln('Hello, world!');
process.stdin.writeln('Hello, galaxy!');
process.stdin.writeln('Hello, universe!');
}
Run Code Online (Sandbox Code Playgroud)
在这个答案的范围之外,我们可以操作进程对象,发送中断,终止等,并且当进程结束时,期望在流上获得完成事件。
| 归档时间: |
|
| 查看次数: |
6091 次 |
| 最近记录: |