当命令无法执行时,NSTask 会收到通知 "command not found"
NSTask get notified when a command can't execute "command not found"
我正在尝试从我的应用程序 运行 终端 commands/scripts,一切正常,但是当命令错误并且无法执行时,我得到这样的信息:
但是这个“/bin/bash: line...”字符串不在我从任务中得到的输出字符串中,有没有办法在我的应用程序中得到这些错误或者以任何方式得到通知发生了吗?
我的代码
// Create a new task
let task: Process = Process()
task.environment = env
task.launchPath = "/usr/bin/env"
task.arguments = ["/bin/bash", "-c", command.scriptCode]
// Assign output pipes
let pipe: Pipe = Pipe()
let outHandle: FileHandle = pipe.fileHandleForReading
task.standardOutput = pipe
outHandle.readabilityHandler = { pipe in
if let line = String(data: pipe.availableData, encoding: String.Encoding.utf8) {
if line.contains("command not found") {
// never triggered
} else {
print("New ouput: \(NSDate() )\(line)")
}
} else {
print("Error decoding data: \(pipe.availableData)")
}
}
您要找的东西是 NSTask
或 Process
class 中的 standardError 属性。将管道分配给此 属性,就像您对 standardOutput
所做的那样。
我正在尝试从我的应用程序 运行 终端 commands/scripts,一切正常,但是当命令错误并且无法执行时,我得到这样的信息:
但是这个“/bin/bash: line...”字符串不在我从任务中得到的输出字符串中,有没有办法在我的应用程序中得到这些错误或者以任何方式得到通知发生了吗?
我的代码
// Create a new task
let task: Process = Process()
task.environment = env
task.launchPath = "/usr/bin/env"
task.arguments = ["/bin/bash", "-c", command.scriptCode]
// Assign output pipes
let pipe: Pipe = Pipe()
let outHandle: FileHandle = pipe.fileHandleForReading
task.standardOutput = pipe
outHandle.readabilityHandler = { pipe in
if let line = String(data: pipe.availableData, encoding: String.Encoding.utf8) {
if line.contains("command not found") {
// never triggered
} else {
print("New ouput: \(NSDate() )\(line)")
}
} else {
print("Error decoding data: \(pipe.availableData)")
}
}
您要找的东西是 NSTask
或 Process
class 中的 standardError 属性。将管道分配给此 属性,就像您对 standardOutput
所做的那样。