斯威夫特 5.4
let commandString: String =
"""
set terminal png
set output 'FIND_ME_01.png'
plot sin(x)
quit\n
"""
func plot() {
let argv: [String] = ["--persist"] // do not close interactive plot
let task = Process()
task.arguments = argv
// "/opt/homebrew/bin/gnuplot" // Big Sur, Apple Silicon
task.launchPath = "/usr/local/bin/gnuplot" // Big Sur, Intel
// where to find the output
let homeDir = FileManager.default.homeDirectoryForCurrentUser
task.currentDirectoryURL = homeDir.appendingPathComponent("Desktop")
let pipeIn = Pipe()
task.standardInput = pipeIn
let pipeOut = Pipe()
task.standardOutput = pipeOut
let pipeErr = Pipe()
task.standardError = pipeErr
do {
try task.run()
let commandData = commandString.data(using: .utf8)!
pipeIn.fileHandleForWriting.write(commandData)
let dataOut = pipeOut.fileHandleForReading.readDataToEndOfFile()
if let output = String(data: dataOut, encoding: .utf8) {
print("STANDARD OUTPUT\n" + output)
}
let dataErr = pipeErr.fileHandleForReading.readDataToEndOfFile()
if let outputErr = String(data: dataErr, encoding: .utf8) {
print("STANDARD ERROR \n" + outputErr)
}
} catch {
print("FAILED: \(error)")
}
task.waitUntilExit()
print("STATUS: \(task.terminationStatus)")
}
当前的 Swift"""
语法允许多行字符串文字。这避免了字符串连接的需要。
注意:commandString
需要以换行符终止。\n
如果最后没有使用,则需要一个结束的额外空行。
quit\n
"""
quit
"""