swiftcocoaswift-playgroundnstasknspipe

Swift NStask function


I'm a complete swift noob. Using this code in xcode I get the result I need. I created a command line binary "menubar" that takes several arguments. I normally run it in the terminal "/bin/menubar getip", "/bin/menubar/getuser". I want to create a function based on the following working code.

import Cocoa
import Foundation

var task:NSTask = NSTask()
var pipe:NSPipe = NSPipe()

task.launchPath = "/bin/menubar"
task.arguments = ["getip"]
task.standardOutput = pipe
task.launch()

var handle = pipe.fileHandleForReading
var data = handle.readDataToEndOfFile()
var result_s = NSString(data: data, encoding: NSUTF8StringEncoding)
print(result_s)

I want to convert it to a function.

func commmand (argument: String) -> String
{

let task:NSTask = NSTask()
let pipe:NSPipe = NSPipe()

task.launchPath = "/bin/menubar"
task.arguments = ["argument"]
task.standardOutput = pipe
task.launch()

let handle = pipe.fileHandleForReading
let data = handle.readDataToEndOfFile()
let result_s = NSString(data: data, encoding: NSUTF8StringEncoding)
return result_s
}
commmand getip

Solution

  • Try this:

    func commmand(argument: String) -> String
    {
    
        let task:NSTask = NSTask()
        let pipe:NSPipe = NSPipe()
    
        task.launchPath = "/bin/menubar"
        task.arguments = [argument]
        task.standardOutput = pipe
        task.launch()
    
        let handle = pipe.fileHandleForReading
        let data = handle.readDataToEndOfFile()
        let result_s = String(data: data, encoding: NSUTF8StringEncoding)!
        return result_s
    }
    
    print(commmand("getip"))