10

I am new in Swift and I did not found anything about executing external programs or access external processes using Swing language.

Is it possible to do in the current stage of the language development or I should use Objective-C instead?

Maybe there are some Objective-C libraries that can be used inside my Swift program?

Thanks.

2 Answers 2

14

You can run external programs using NSTask. For example, from Circle and Square:

import Foundation func executeCommand(command: String, args: [String]) -> String { let task = NSTask() task.launchPath = command task.arguments = args let pipe = NSPipe() task.standardOutput = pipe task.launch() let data = pipe.fileHandleForReading.readDataToEndOfFile() let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) return output } let commandOutput = executeCommand("/bin/echo", ["Hello, I am here!"]) println("Command output: \(commandOutput)") 
Sign up to request clarification or add additional context in comments.

2 Comments

NSTask is not available on iOS. Are you aware of an alternative for that platform?
@Raphael It is not possible to run external tasks on iOS.
3

Improved version of Rob's answer (in that you don't need to specify the full path of your executable), and also updated for Swift 3:

import Foundation func execCommand(command: String, args: [String]) -> String { if !command.hasPrefix("/") { let commandFull = execCommand(command: "/usr/bin/which", args: [command]).trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) return execCommand(command: commandFull, args: args) } else { let proc = Process() proc.launchPath = command proc.arguments = args let pipe = Pipe() proc.standardOutput = pipe proc.launch() let data = pipe.fileHandleForReading.readDataToEndOfFile() return String(data: data, encoding: String.Encoding.utf8)! } } 

1 Comment

Process is not available on iOS. Are you aware of an alternative for that platform?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.