运行 "ls" 在 Cocoa 应用程序中通过 NSTask 无法正常工作
run "ls" through NSTask in a Cocoa app not working
我正在测试 NSTask 的使用,因为我想尝试 运行 我用 Swift 编写的 Cocoa 应用程序中的一堆命令,我通常 运行 ] 在终端中。
在 viewDidLoad 中,我有以下代码:
let task = NSTask()
let pipe = NSPipe()
task.standardOutput = pipe
task.launchPath = "/usr/bash"
task.currentDirectoryPath = dir
task.arguments = ["ls"]
let file:NSFileHandle = pipe.fileHandleForReading
task.launch()
task.waitUntilExit()
let data = file.readDataToEndOfFile()
let datastring = NSString(data: data, encoding: NSUTF8StringEncoding)
print("datastring = \(datastring)")
应用程序 运行s 但我收到以下错误:
无法在 (NSWindow) 上设置 (contentViewController) 用户定义检查 属性:启动路径不可访问
有人可以帮助我理解我做错了什么吗?我现在要做的是 运行 ls 命令,然后将结果存储到字符串数组中...
谢谢
嗯,对于初学者来说,/usr/bash
不是 bash
可执行文件的路径。你想要 /bin/bash
.
接下来,调用 /bin/bash ls
不起作用,这与您所做的等效。在 shell,如果你想给 bash
一个命令来处理和执行,你会做 /bin/bash -c ls
。因此,您想将任务的 arguments
设置为 ["-c", "ls"]
.
但是,您为什么要在这里涉及 shell 口译员?为什么不直接将任务的 launchPath
设置为 "/bin/ls"
和 运行 ls
命令呢?如果您只想列出当前工作目录的内容,您可以不设置 arguments
,或者将其设置为要传递给 ls
的参数,例如选项或路径(例如 ["-l", "/Applications"]
).
我正在测试 NSTask 的使用,因为我想尝试 运行 我用 Swift 编写的 Cocoa 应用程序中的一堆命令,我通常 运行 ] 在终端中。
在 viewDidLoad 中,我有以下代码:
let task = NSTask()
let pipe = NSPipe()
task.standardOutput = pipe
task.launchPath = "/usr/bash"
task.currentDirectoryPath = dir
task.arguments = ["ls"]
let file:NSFileHandle = pipe.fileHandleForReading
task.launch()
task.waitUntilExit()
let data = file.readDataToEndOfFile()
let datastring = NSString(data: data, encoding: NSUTF8StringEncoding)
print("datastring = \(datastring)")
应用程序 运行s 但我收到以下错误:
无法在 (NSWindow) 上设置 (contentViewController) 用户定义检查 属性:启动路径不可访问
有人可以帮助我理解我做错了什么吗?我现在要做的是 运行 ls 命令,然后将结果存储到字符串数组中...
谢谢
嗯,对于初学者来说,/usr/bash
不是 bash
可执行文件的路径。你想要 /bin/bash
.
接下来,调用 /bin/bash ls
不起作用,这与您所做的等效。在 shell,如果你想给 bash
一个命令来处理和执行,你会做 /bin/bash -c ls
。因此,您想将任务的 arguments
设置为 ["-c", "ls"]
.
但是,您为什么要在这里涉及 shell 口译员?为什么不直接将任务的 launchPath
设置为 "/bin/ls"
和 运行 ls
命令呢?如果您只想列出当前工作目录的内容,您可以不设置 arguments
,或者将其设置为要传递给 ls
的参数,例如选项或路径(例如 ["-l", "/Applications"]
).