使用std.process.Child.spawn()编译失败,报错“error: expected tuple or struct argument, found []u8”
使用std.process.Child.spawn()编译失败,报错“error: expected tuple or struct argument, found []u8”
嘿,这个错误我之前也踩过坑!问题出在Child.init的参数顺序上——你把分配器和命令数组的位置搞反了!
Zig标准库中std.process.Child.init的正确调用方式是先传分配器,再传命令数组,你现在写的Child.init(command, alloc)刚好颠倒了两者的顺序。这种参数顺序错误会让caller的类型完全不符合预期,后续调用spawn()时就会抛出这种看起来摸不着头脑的类型错误。
只需要把这行代码修正为:
var caller = Child.init(alloc, command);
重新编译后应该就能正常运行了。
顺带提个小建议:你可以用标准库的Child.collectOutput()方法来简化stdout和stderr的收集逻辑,不用手动初始化两个ArrayList,能省不少代码量~
备注:内容来源于stack exchange,提问作者tk-noodle
相关产品推荐
相关产品推荐

