Macos 终端命令未被识别?
当我直接在终端中键入时,它会按预期工作,如果应用程序未运行,则返回0,如果应用程序正在运行,则返回1 lsappinfo list | grep-v grep | grep bundleID | grep com.test.myapp | wc-l 但是,当我使用下面的代码(swift 3-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
// 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的解决方案,看看我是否能想出这样做的方法。谢谢你们两位!