Swift使用Process执行命令行报NSPOSIXErrorDomain Code=13权限错误如何解决
问题根因
- 你把
Process的launchPath和参数逻辑完全写反了:launchPath需要指向你要执行的可执行文件的绝对路径,你现在填的是TestFolder这个目录路径,目录本身没有可执行权限,所以直接触发13权限错误arguments是传给可执行文件的参数,你要执行ls查看该目录内容,应该把ls的路径填到launchPath,目录路径作为参数传入
修复后代码示例
let task = Process() // macOS 系统 ls 命令默认路径为 /bin/ls,填到 launchPath task.launchPath = "/bin/ls" // 要查询的目录作为参数传给 ls task.arguments = ["/Users/donghanhu/Documents/TestFolder"] // 可选配置:如果需要获取命令输出可以添加管道 let outputPipe = Pipe() task.standardOutput = outputPipe do { try task.run() task.waitUntilExit() // 读取输出的可选代码 let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile() if let result = String(data: outputData, encoding: .utf8) { print("命令执行结果:\n\(result)") } } catch { print("执行出错,错误:\(error)") }
额外注意事项(如果需要执行自定义可执行文件)
如果你要运行的是TestFolder目录下的自定义脚本/二进制文件,需要补充以下配置:
launchPath要指向可执行文件本身的完整路径,例如/Users/donghanhu/Documents/TestFolder/my_executable- 给自定义可执行文件添加执行权限:终端执行
chmod +x 你的可执行文件完整路径 - 确认沙箱关闭生效:在Xcode项目的「Signing & Capabilities」标签页,完全取消「App Sandbox」的勾选,不要仅修改配置文件
- macOS 10.15及以上系统需要确认应用有对应目录的访问权限,可以在「系统设置→隐私与安全性→完全磁盘访问权限」中给你的应用授权
内容的提问来源于stack exchange,提问作者Han
相关产品推荐
相关产品推荐

