1

尝试通过游乐场中的 Process() 实例执行终端命令时,我遇到了域权限错误。我假设我必须以某种方式关闭域检查,但我不知道该怎么做。如果可以使用代码解决,我也无法在此处找到类似问题的答案。如果这已经被问到,我很抱歉。

运行 Xcode 版本 11.2.1 (11B500)
Swift 5.1.2
MacOS

此脚本运行“p4”命令(Perforce SCM 命令行应用程序)以提取正在运行的作业列表并打印它们。

import Foundation

NSSetUncaughtExceptionHandler { exception in
    print(" Exception thrown: \(exception)")
}

func shell(_ args: String...) -> Int32 {

    var returnCode: Int32

    let task = Process()
    let url = URL(fileURLWithPath: "/path_to/p4")
    let outputPipe = Pipe()
    let errorPipe = Pipe()
    task.standardOutput = outputPipe
    task.standardError = errorPipe
    task.executableURL = url
    task.arguments = args
    do {
        try task.run()

        print("Running the task\n\n")

        let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
        let errorData = errorPipe.fileHandleForReading.readDataToEndOfFile()

        print ("Raw output:\n\tOutput data:\n\t\(outputData)\n\tError: \(errorData)\n\n")

        let output = String(decoding: outputData, as: UTF8.self)
        let error = String(decoding: errorData, as: UTF8.self)

        print ("Decoded output:\n\tOutput data:\n\t\(output)\n\tError: \(error)\n\n")

        returnCode = task.terminationStatus
    } catch {
        print(error)
        returnCode = -1
    }

    return returnCode
}

shell("monitor", "show", "-ael")

操场返回以下内容:

Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"

如果需要其他信息或有帮助,请告诉我。

任何帮助或建议将不胜感激,并感谢您的时间和考虑。

问候,斯科特

4

0 回答 0