-
-
Save Seasons7/836d3676884a40c8c98a to your computer and use it in GitHub Desktop.
import Cocoa | |
import Foundation | |
var str = "Hello, playground" | |
var task:NSTask = NSTask() | |
var pipe:NSPipe = NSPipe() | |
task.launchPath = "/bin/ls" | |
task.arguments = ["-la"] | |
task.standardOutput = pipe | |
task.launch() | |
var handle = pipe.fileHandleForReading | |
var data = handle.readDataToEndOfFile() | |
var result_s = NSString(data: data, encoding: NSUTF8StringEncoding) | |
print(result_s) |
for what it's worth, pipe
and task
are immutable and should be let
that is to say:
let task = NSTask()
let pipe = NSPipe()
task.launchPath = "/bin/ls"
task.arguments = ["-la"]
task.standardOutput = pipe
task.launch()
the other variables might also need to be declared let
.
for swift 3.0:
// Create a Task instance (was NSTask on swift pre 3.0)
let task = Process()
// Set the task parameters
task.launchPath = "/bin/ls"
task.arguments = ["-laF@" , filePath]
// Create a Pipe and make the task
// put all the output there
let pipe = Pipe()
task.standardOutput = pipe
// Launch the task
task.launch()
// Get the data
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
print(output!)
thanks! @ingconti
@ingconti: Do you have any sample how to interact with standardInput? And why Process is Task on Swift 3 for Linux? Thank you.
is it possible to run multiple commands?
Updated for Swift 4
//: Playground - noun: a place where people can play
import Cocoa
import Foundation
var task = Process()
var pipe = Pipe()
task.executableURL = URL(fileURLWithPath: "/bin/ls")
task.arguments = ["-la","/Users/"] //multiple options
task.standardOutput = pipe
try task.run()
var handle = pipe.fileHandleForReading
var data = handle.readDataToEndOfFile()
var printing = String (data: data, encoding: String.Encoding.utf8)
print(printing!)
I'm using this method for running app but I got "Message from debugger: Terminated due to signal 9".Any idea?
let path=("\(FileManager.default.currentDirectoryPath)/data/app/setup.pkg")
let buildTask: Process = Process()
//Path for open
buildTask.launchPath = "/usr/bin/open"
buildTask.arguments = [path]
buildTask.launch()
Message from debugger: Terminated due to signal 9
buildTask.launch()
is not up to date anymore. Since High Sierra, Process().lauch()
is deprecated. Use Process().run
instead and catch the error that may be thrown.
See Apple Developer Documentation for launch()
This Tutorial goes a bit more into detail regarding NSTasks.
save this file.
chmod +x nstask.swift
xcrun swift a.swift -f /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks