swift - 在 Swift 中启动终端编辑器,例如 vi 或 nano
问题描述
我试图在用 Swift 编写的命令行程序中启动终端编辑器,例如 vi 或 nano。
这是一个天真的尝试,我猜标准输入和输出应该是不同的。程序什么也不输出。
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = ["nano"]
task.standardInput = FileHandle(forReadingAtPath: "/dev/tty")
task.standardOutput = FileHandle(forWritingAtPath: "/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()
推荐阅读
- mobile - 离子反应 firebase otp 文本定制
- strapi - 如何将图像插入到strapi文章中?
- javascript - JS:如何使用替换将字符串转换为 JSON 格式,然后使用 JSON.Parse
- python - Function that which takes a list of strings and capitalizes them appropriately as a book or movie title (Check body for more info)
- c - 为什么这段代码没有正确重新提示?
- c - 仅将数组长度作为参数的递归合并排序
- excel - 聚合的动态数组公式
- wordpress - 您可以使用自定义分类法维护 Wordpress URL 结构中的层次结构吗?
- django - 使用 Django/Nginx/Daphne 连接到安全 websocket 的问题
- python - Python语音识别:语音上下文、短语、配置