我正在尝试使用Swift打开终端并从那里运行python脚本。我发现这个功能是这样做的:
(Get terminal output after a command swift)
func runCommand(cmd : String, args : String...) -> (output: [String], error: [String], exitCode: Int32) {
var output : [String] = []
var error : [String] = []
let task = NSTask()
task.launchPath = cmd
task.arguments = args
let outpipe = NSPipe()
task.standardOutput = outpipe
let errpipe = NSPipe()
task.standardError = errpipe
task.launch()
let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
output = string.componentsSeparatedByString("\n")
}
let errdata = errpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(errdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
error = string.componentsSeparatedByString("\n")
}
task.waitUntilExit()
let status = task.terminationStatus
return (output, error, status)
}
我正在调用函数,就像它写在问题中一样:
let output = runCommand("/usr/bin" , args: "python " + folderPath + selecteditem)
打印args是:“python /Users/michael/Documents/Python/testestest.py”
这是,如果我将它粘贴到终端,是一个有效的命令。
但xCode告诉我:无法posix_spawn:错误13
你建议我做什么?我不确定是否有更简单的方法来启动运行该命令的可见控制台。我想到的另一个问题是,在xcode中实时输出是很好的(这意味着在python脚本仍在运行时查看输出)这是否可能?
感谢
答案 0 :(得分:0)
fbauth2
在终端中工作,因为它被输入/ bin / bash或另一个shell解释器。使用NSTask运行shell命令时,您有两个选项:
就像在终端中一样使用bash。
python /Users/michael/Documents/Python/testestest.py
直接调用可执行文件。
runCommand("/bin/bash" , args: "-c", "python " + folderPath + selecteditem)
如果您使用第二个选项,您必须确切知道可执行文件的位置,但在正面,您可以将每个参数作为runCommand函数的单独参数输入,并且您不必担心将转义引号置于其中他们喜欢你用bash做的事。