在Swift中启动终端编辑器,如vi或nano
我正试图在用Swift编写的命令行程序中启动一个终端编辑器,如vi或nano 这是一个天真的尝试,我猜标准的输入和输出应该是不同的。程序不输出任何内容在Swift中启动终端编辑器,如vi或nano,swift,shell,Swift,Shell,我正试图在用Swift编写的命令行程序中启动一个终端编辑器,如vi或nano 这是一个天真的尝试,我猜标准的输入和输出应该是不同的。程序不输出任何内容 let task=Process() task.launchPath=“/usr/bin/env” task.arguments=[“nano”] task.standardInput=FileHandle(用于读取路径:“/dev/tty”) task.standardOutput=文件句柄(用于写入路径:“/dev/tty”) task.la
let task=Process()
task.launchPath=“/usr/bin/env”
task.arguments=[“nano”]
task.standardInput=FileHandle(用于读取路径:“/dev/tty”)
task.standardOutput=文件句柄(用于写入路径:“/dev/tty”)
task.launch()
task.waitUntilExit()
此示例将在终端窗口中启动“vi”编辑器。可以通过将代码复制/粘贴到新添加的“main.swift”文件并删除预先存在的AppDelegate,在Xcode swift项目中运行。还需要关闭沙箱
import Cocoa
let process = Process()
let pipe = Pipe()
process.executableURL = URL(fileURLWithPath:"/bin/sh/")
var args : [String]!
args = []
args.append("-c")
args.append("open '/usr/bin/vi'")
process.arguments = args
process.standardOutput = pipe
process.standardError = pipe
process.terminationHandler = { (process) in
print("\ndidFinish: \(!process.isRunning)")
}
let fileHandle = pipe.fileHandleForReading
do {
try process.run()
let outStr = String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8)
print(outStr as Any)
} catch { print(String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8) as Any)}
// **** main.swift **** //
let app = NSApplication.shared
app.setActivationPolicy(.regular)
app.activate(ignoringOtherApps:true)
app.run()
谢谢这将在新的终端窗口中打开vi。我要做的是在运行程序的同一终端中打开vi。