gpt4 book ai didi

sql - 在swift中通过命令行重建SQL数据库

转载 作者:行者123 更新时间:2023-11-30 12:21:55 25 4
gpt4 key购买 nike

尝试通过 Swift 运行命令行参数非常困难。我需要对用户手动拖到应用程序上的 SQL 文件运行命令(因此文件路径每次都不同)。

我的应用程序和命令行之间的管道正在工作(发送“pwd”将返回正确的响应),但是当我尝试发送我想要的参数时,我无法让它们工作。我尝试同时使用“bin/bash”和“usr/bin/env”,但没有成功。

本质上,我正在尝试重建已损坏的数据库,而不必通过终端进入并自己完成。我在尝试中看到的常见错误包括“无法访问启动路径”或“找不到文件或目录”。我尝试通过终端使用“chmod 6”来设置文件的权限,但这仍然不起作用。如果我对访问文件时做错了什么或尝试重建数据库的其他方法有任何帮助,我们将不胜感激。

    func checkForCorruption(filePath: URL) -> (String?, Bool){
let folder = filePath.deletingLastPathComponent()

let arguments = ["cd \(folder.relativePath)", "sqlite3 Restaurant.sql", ".mode insert",".output dump.sql",".dump", ".exit"]
let task = Process()
task.launchPath = "bin/bash/"

task.arguments = arguments

let inPipe = Pipe()
task.standardInput = inPipe
let pipe = Pipe()
task.standardOutput = pipe

let errPipe = Pipe()
task.standardError = errPipe
var output : [String] = []

task.launch()
task.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let errData = errPipe.fileHandleForReading.readDataToEndOfFile()
if let out = NSString(data: data, encoding: String.Encoding.utf8.rawValue){
print(out)
}
if let errOut = NSString(data: errData, encoding: String.Encoding.utf8.rawValue){
print("error: \(errOut)")
}
let outHandle = pipe.fileHandleForReading

if var string = String(data: data, encoding: .utf8) {
string = string.trimmingCharacters(in: .newlines)
output = string.components(separatedBy: "\n")
do {
try string.write(toFile: "\(folder.relativePath)/dump.sql", atomically: true, encoding: String.Encoding.utf8)
}
catch _ {

print("something went wrong")
}
}

outHandle.readabilityHandler = { pipe in
print("reading")
if let line = String(data: pipe.availableData, encoding: String.Encoding.utf8) {
print("New ouput: \(line)")
} else {
print("Error decoding data: \(pipe.availableData)")
}
}
return ("", false)
}

最佳答案

我在工作中得到了一些帮助,对于任何遇到此问题的人,这就是答案(打印语句只是转储文件所在的位置)。

let arguments = ["\(filePath.relativePath)", ".mode insert",".output dump.sql",".dump", ".exit"]
let task = Process()
task.launchPath = "/usr/bin/sqlite3"
print(FileManager.default.currentDirectoryPath)

关于sql - 在swift中通过命令行重建SQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44703226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com