NSTask (whoami) 到字符串,到 NSTask (cp) 失败 - Swift
NSTask (whoami) to string, to NSTask (cp) failed - Swift
我想在存档之前将我的 Mac 的地址簿复制到一个保存位置。这是我的代码:
// whoami
let whoam : NSTask = NSTask()
whoam.launchPath = "/usr/bin/whoami"
// pipe whoami| NSString
let UltimPipe : NSPipe = NSPipe()
let UltimPipeLisible : NSFileHandle = UltimPipe.fileHandleForReading
whoam.standardOutput = UltimPipe
// lancement
whoam.launch()
// lecture de la sortie
let DonSortie : NSData = UltimPipeLisible.readDataToEndOfFile()
let Sortie : String? = String(data: DonSortie, encoding:
NSUTF8StringEncoding)
if Sortie == nil
{
print("Résultat de sortie non-valide")
let MonAlerte:NSAlert = NSAlert()
MonAlerte.messageText = "Aucun élement trouvé."
MonAlerte.informativeText = ""
MonAlerte.runModal()
exit(1)
}
let ligne : String = Sortie!
print (ligne)
let source = "/Users/"+ligne+"/Library/Application Support/AddressBook"
let destin = "/Users/"+ligne+"/Desktop/test/"
//cp
let duTache : NSTask = NSTask()
duTache.launchPath = "/bin/cp"
duTache.arguments = [ "-r", source, " ", destin ]
print (duTache.arguments)
let ifcPipe : NSPipe = NSPipe()
duTache.standardOutput = ifcPipe
// lancement
duTache.launch()
返回的错误是:
usage: cp [-R [-H |...]
看起来我有语法问题,当我打印 duTache 的参数时 (print (duTache.arguments)),答案是:
Optional(["-r", "/Users/username\n/Library/Application Support/AddressBook", " ", "/Users/username\n/Desktop/test/"])
也许如果我删除用户名后面的“\n”,操作就可以完成?有人知道怎么做吗?
感谢您阅读我的post。
var ligne = "username\n"
print(ligne,0)
/*
username
0
*/
let newLine = ligne.removeAtIndex(ligne.endIndex.predecessor()) // newLine is "\n"
print(ligne,0)
/*
username 0
*/
import Foundation
func execute(command: String, args: [String]) -> String {
let task = NSTask()
task.launchPath = command
task.arguments = args
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String? = String(data: data, encoding: NSUTF8StringEncoding)
task.waitUntilExit()
return output ?? ""
}
print(execute("/bin/ls", args: ["-alsp"]))
print(execute("/bin/ls", args: []))
execute("/usr/bin/say", args: ["Hello World!"])
如果您发现如何处理异常(尝试一些愚蠢的命令,如 /bin/lss),请告诉我!我需要先查看文档...
我想在存档之前将我的 Mac 的地址簿复制到一个保存位置。这是我的代码:
// whoami
let whoam : NSTask = NSTask()
whoam.launchPath = "/usr/bin/whoami"
// pipe whoami| NSString
let UltimPipe : NSPipe = NSPipe()
let UltimPipeLisible : NSFileHandle = UltimPipe.fileHandleForReading
whoam.standardOutput = UltimPipe
// lancement
whoam.launch()
// lecture de la sortie
let DonSortie : NSData = UltimPipeLisible.readDataToEndOfFile()
let Sortie : String? = String(data: DonSortie, encoding:
NSUTF8StringEncoding)
if Sortie == nil
{
print("Résultat de sortie non-valide")
let MonAlerte:NSAlert = NSAlert()
MonAlerte.messageText = "Aucun élement trouvé."
MonAlerte.informativeText = ""
MonAlerte.runModal()
exit(1)
}
let ligne : String = Sortie!
print (ligne)
let source = "/Users/"+ligne+"/Library/Application Support/AddressBook"
let destin = "/Users/"+ligne+"/Desktop/test/"
//cp
let duTache : NSTask = NSTask()
duTache.launchPath = "/bin/cp"
duTache.arguments = [ "-r", source, " ", destin ]
print (duTache.arguments)
let ifcPipe : NSPipe = NSPipe()
duTache.standardOutput = ifcPipe
// lancement
duTache.launch()
返回的错误是:
usage: cp [-R [-H |...]
看起来我有语法问题,当我打印 duTache 的参数时 (print (duTache.arguments)),答案是:
Optional(["-r", "/Users/username\n/Library/Application Support/AddressBook", " ", "/Users/username\n/Desktop/test/"])
也许如果我删除用户名后面的“\n”,操作就可以完成?有人知道怎么做吗?
感谢您阅读我的post。
var ligne = "username\n"
print(ligne,0)
/*
username
0
*/
let newLine = ligne.removeAtIndex(ligne.endIndex.predecessor()) // newLine is "\n"
print(ligne,0)
/*
username 0
*/
import Foundation
func execute(command: String, args: [String]) -> String {
let task = NSTask()
task.launchPath = command
task.arguments = args
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String? = String(data: data, encoding: NSUTF8StringEncoding)
task.waitUntilExit()
return output ?? ""
}
print(execute("/bin/ls", args: ["-alsp"]))
print(execute("/bin/ls", args: []))
execute("/usr/bin/say", args: ["Hello World!"])
如果您发现如何处理异常(尝试一些愚蠢的命令,如 /bin/lss),请告诉我!我需要先查看文档...