Macos 终端命令未被识别?

Macos 终端命令未被识别?,macos,swift3,Macos,Swift3,当我直接在终端中键入时,它会按预期工作,如果应用程序未运行,则返回0,如果应用程序正在运行,则返回1 lsappinfo list | grep-v grep | grep bundleID | grep com.test.myapp | wc-l 但是,当我使用下面的代码(swift 3-macOS)时,它会说这是一个无法识别的命令 // DECLARE TASK let task = Process() // DEFINE THE PATH task.launchP

当我直接在终端中键入时,它会按预期工作,如果应用程序未运行,则返回0,如果应用程序正在运行,则返回1

lsappinfo list | grep-v grep | grep bundleID | grep com.test.myapp | wc-l

但是,当我使用下面的代码(swift 3-macOS)时,它会说这是一个无法识别的命令

// DECLARE TASK
    let task = Process()

    // DEFINE THE PATH
    task.launchPath = "/usr/bin/lsappinfo"

    // DEFINE THE ARGUMENTS
    task.arguments = ["list | grep -v grep | grep bundleID | grep com.test.myapp | wc -l"]

    // DECLARE outputPipe
    let outputPipe = Pipe()

    // RUN THE TASK
    task.launch()

    // DECLARE data
    let data = outputPipe.fileHandleForReading.readDataToEndOfFile()

    // DECLARE output AS THE UTF-8 STRING OF THE TERMINAL'S OUTPUT
    let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
        print(output!)

    if output == "0" {
        print("App is not running!")

    } else {
        print("App is running!")
    }

    // PAUSE UNTIL COMPLETED
    task.waitUntilExit()
有人能告诉我哪里出了错,因为我对Swift还不熟悉,而且还在为语言/语法绞尽脑汁


提前感谢大家。

管道操作不是流程的参数,它们是连接多个独立流程的外壳说明。如果swift中的任务构造需要一个进程和一组命令行参数,那么这里的一种方法可能是启动bash二进制文件,然后将
-c“lsappinfo list | grep-v grep | grep bundleID | grep com.test.myapp | wc-l”
作为完整的参数集。通过这种方式,您可以让bash整理完成管道所需的内容。

查看
NSWorkspace
及其
运行应用程序
方法,以获得可能更简单的解决方案。这里有个例子。谢谢马丁-这真是个好办法!你赢了我@cnettel,我已经按照你的建议尝试过了,但这给了我同样的错误信息。我只需要检查一个外部应用程序是否正在运行,我将查看Martin。R的解决方案,看看我是否能想出这样做的方法。谢谢你们两位!