Запустите скрипт Python через Swift

Я новичок в быстром, но я пытаюсь запустить скрипт python через быстрый код. Это мой код до сих пор, однако вывод, который я продолжаю получать, это zsh: разрешение отклонено. Я не уверен, что делать дальше. Есть ли у меня возможность запустить скрипт python.

Мой текущий метод

class func runCode(launchPath: String, cmd: [String]) -> String {
        let pipe = Pipe()
        let process = Process()
        process.launchPath = "/bin/zsh"
        process.arguments = ["-c", String(format:"%@", cmd)]
        process.standardOutput = pipe
        let fileHandle = pipe.fileHandleForReading
        process.launch()
        
        return String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8) ?? "Error"
    }

Вызов метода

print(Shortcuts.runCode(launchPath: "/usr/bin/python", cmd: [contentView.controller.path]))

Вывод zsh:2: разрешение запрещено:


person Anshuman Komawar    schedule 01.08.2020    source источник
comment
Вы проверили разрешения на /usr/bin/python и целевой скрипт для исполняющего пользователя?   -  person Cobalt    schedule 02.08.2020
comment
Я не совсем уверен, как проверить разрешения, хотя целевой скрипт правильный. Как я могу проверить разрешение?   -  person Anshuman Komawar    schedule 02.08.2020


Ответы (1)


Похоже, что процесс, который вы запускаете, заканчивается /bin/zsh -c [contentView.controller.path], то есть вы на самом деле вообще не используете Python. Обратите внимание, что на самом деле вы не используете аргумент launchPath в методе runCode.

Мне кажется, что вы должны делать это вместо этого:

let pipe = Pipe()
let process = Process()
process.launchPath = "/usr/bin/python"
process.arguments = [String(format:"%@", contentView.controller.path)]
process.standardOutput = pipe
let fileHandle = pipe.fileHandleForReading
process.launch()

return String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8) ?? "Error"

Я не помещал его в функцию, потому что я не уверен, для чего еще вы используете функцию runCode, но это должно работать для вашего конкретного примера.

person Sam    schedule 02.08.2020