如何在Dart中正确执行命令?Process.run调用全局命令失败求助
问题描述
我想用Dart的Process.run执行git clone、flutter build这类全局命令,编写了如下代码:
import 'dart:io'; void main() async { print('build start'); // var res = await Process.run('git clone xxxx', []); var res = await Process.run('flutter build windows --dart-define=RunEnv=dist', []); print(res); print('build end'); }
运行后执行失败,报错信息如下:
Unhandled exception: ProcessException: 系统找不到指定的文件。 Command: flutter
为什么Dart的Process无法识别flutter、git这类全局命令?Node.js中很容易实现该操作,请问该如何解决?
解决方法
1. 正确拆分命令与参数
Process.run的第一个参数只需要传入命令本身,所有参数必须放到第二个参数的列表中,不能将完整命令串作为第一个参数传入。修正后的代码示例:
import 'dart:io'; void main() async { print('build start'); // 执行flutter build命令 var res = await Process.run( 'flutter', ['build', 'windows', '--dart-define=RunEnv=dist'], ); // 执行git clone命令示例 // var gitRes = await Process.run('git', ['clone', 'xxxx']); print(res); print('build end'); }
2. 直接指定命令的完整路径(拆分后仍报错时)
如果拆分参数后依旧提示找不到命令,大概率是Dart进程未正确读取到系统环境变量,此时可以直接传入命令的完整可执行文件路径:
- Windows系统示例:
var res = await Process.run( r'C:\flutter\bin\flutter.exe', // 替换为你本地flutter.exe的实际路径 ['build', 'windows', '--dart-define=RunEnv=dist'], );
- macOS/Linux系统示例:
var res = await Process.run( '/usr/local/bin/flutter', // 替换为你本地flutter的实际路径 ['build', 'windows', '--dart-define=RunEnv=dist'], );
3. 验证并修复环境变量
先确认flutter、git的安装路径已添加到系统环境变量PATH中,同时验证Dart进程是否能读取到该环境变量:
print(Platform.environment['PATH']);
如果输出结果中没有包含flutter或git的路径,需先将对应路径添加到系统环境变量,再重启终端或IDE后重新运行Dart程序。另外,也可以先在终端中执行flutter --version、git --version,确认命令能正常执行后再运行Dart代码。
内容的提问来源于stack exchange,提问作者sanyanl
相关产品推荐
相关产品推荐

