Как запустить команды терминала из приложения какао? - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблемы с запуском команды терминала из приложения какао. Вход для Терминала очень прост: /Users/.../Csvmidi </Users/.../test.csv> /Users/.../Melody.mid Это три входа - три фактических пути - просто записываются в строку и разделяются spa c: первый "Csvmidi" запускает приложение Unix, которое преобразует test.csv в фактический слышимый MIDI-файл. Через терминал он работает отлично ...

Я просто не могу заставить его работать через приложение Какао.

        let process = Process()
        process.executableURL = URL(fileURLWithPath: "/bin/zsh/")
        process.arguments = [lblCsvmidi.stringValue,"<"+lblURL.stringValue+">",lblMidi.stringValue]
    //I saved the URL of the UNIX program, test.csv and Melody.mid in a lable just to be sure.
    //lblCsvmidi --> URL of Csvmidi UNIX program
    //lblURL --> URL of test.csv
    //lblMidi --> URL of Melody.mid


        print(lblCsvmidi.stringValue,"<" + lblURL.stringValue + ">",lblMidi.stringValue) 
    // this print command was only made to check the arguments in the terminal if they would work --> they do


        process.terminationHandler = { (process) in
            print("\ndidFinish: \(!process.isRunning)")
        }
        do {

          try process.run()
        } catch {}

Когда я запускаю код, он выдаёт мне либо ошибку 75: unmatched", но на самом деле в команде нет кавычки - или я получаю ошибки «Отказано в доступе».

Я попробовал несколько папок bin вроде (я действительно попробовал почти все возможные): - / bin / zsh - / bin / csh - / bin / ksh - ... Что я делаю не так -> У меня нет Здесь я нашел информацию в других Вопросах, и информация о процессах, NSTask и Bundle от Apple мне пока не помогла.

Спасибо !!

1 Ответ

0 голосов
/ 24 апреля 2020

В моей системе без ошибок выполняется следующее:

import Cocoa 

let process = Process()
process.executableURL = URL(fileURLWithPath: "/bin/zsh/")

var args : [String]!
args = []
args.append("-c")
args.append("open '/Users/xxxx/Desktop/myApp.app/Contents/MacOS/myApp'")
process.arguments = args
process.terminationHandler = { (process) in
  print("\ndidFinish: \(!process.isRunning)")
}
do {
   try process.run()
 } catch {}

let app = NSApplication.shared
app.setActivationPolicy(.regular)
app.activate(ignoringOtherApps:true)
app.run()

Строки после "- c" будут зависеть от того, что вы пытаетесь выполнить sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...