iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
スクリプト言語の代わりにcommand-line環境でSwiftを利用するため、引数の取得や標準入出力について調べてみた。
引数の取得は以下の通り。
let args = Process.arguments
for arg in args {
print(arg)
}
標準入力からreturnされるまでを読み込むのは以下の通り。
let standardInput = NSFileHandle.fileHandleWithStandardInput()
let input = standardInput.availableData
let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
print(datastring)
return単位で読み込み続ける場合は、以下となる。
let standardInput = NSFileHandle.fileHandleWithStandardInput()
while true {
let input = standardInput.availableData
if input.length == 0 { break }
let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
print(datastring)
}
上記は、空行が来るとループを抜ける。
標準出力への印字は以下の通り。
let standardOutput = NSFileHandle.fileHandleWithStandardOutput()
let outputString: NSString = "hello\n"
let dataout: NSData? = outputString.dataUsingEncoding(NSUTF8StringEncoding)
if let dout = dataout {
standardOutput.writeData(dout)
}
同じ文字列を標準エラー出力に印字する場合。
let standardError = NSFileHandle.fileHandleWithStandardError()
if let dout = dataout {
standardError.writeData(dout)
}
後で流用できるよう、これらを全部つなげた完全なスクリプトを載せる。
#!/usr/bin/env xcrun swift
import Foundation
let args = Process.arguments
for arg in args {
print(arg)
}
let standardInput = NSFileHandle.fileHandleWithStandardInput()
//while true {
let input = standardInput.availableData
// if input.length == 0 { break }
let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
print(datastring)
//}
let standardOutput = NSFileHandle.fileHandleWithStandardOutput()
let outputString: NSString = "hello\n"
let dataout: NSData? = outputString.dataUsingEncoding(NSUTF8StringEncoding)
if let dout = dataout {
standardOutput.writeData(dout)
}
let standardError = NSFileHandle.fileHandleWithStandardError()
if let dout = dataout {
standardError.writeData(dout)
}
/* End Of File */