You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Dart代码无法获取pwd命令执行结果?如何修改?

解决Dart中Process.start获取pwd结果为空的问题

你的猜测是对的——pwd是个极轻量的命令,启动后瞬间执行完毕并输出结果,可能在你注册stdout监听器之前,它的输出流就已经关闭了,所以监听器根本没机会捕获到数据。

这里有两种可靠的解决方式:

方法一:用Process.run替代(推荐)

Process.run是专门为这种一次性执行命令并获取结果的场景设计的,它会自动帮你处理输出捕获、等待进程结束,代码更简洁可靠:

import 'dart:io';

void main() async {
  var result = await Process.run('pwd', []);
  print('stdout: ${result.stdout}');
  print('stderr: ${result.stderr}');
  print('exit code: ${result.exitCode}');
}

方法二:改进Process.start的写法

如果一定要用Process.start,可以先将stdout的流转换为列表来收集所有输出,这样不管进程执行快慢,都能完整获取数据:

import 'dart:io';
import 'dart:convert';

void main() async {
  var process = await Process.start('pwd', []);
  
  // 先收集所有stdout数据,再处理
  var stdoutData = await process.stdout.transform(utf8.decoder).join();
  var stderrData = await process.stderr.transform(utf8.decoder).join();
  
  print('stdout: $stdoutData');
  print('stderr: $stderrData');
  
  int exitCode = await process.exitCode;
  print('exit code: $exitCode');
}

这么做的原因是,stdout.transform(utf8.decoder).join()会等待整个输出流结束,把所有字节拼接成字符串,既避免了监听器注册不及时的问题,也解决了原始代码直接打印字节数组无法读取的问题。

内容的提问来源于stack exchange,提问作者Stéphane de Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:39:52