【问题标题】:Using NSTask in swift to execute a terminal command快速使用 NSTask 执行终端命令
【发布时间】:2016-07-16 16:36:15
【问题描述】:

您好,我正在尝试使用 swift 制作一个简单的程序来执行这个在 Dock 中添加空格的命令:

defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock

这是我使用的代码:

    let task = NSTask()
    task.launchPath = "/usr/bin/defaults"
    task.arguments = ["write","com.apple.dock","persistent-apps","-array-add","'{\"tile-type\"=\"spacer-tile\";}';","killall Dock"]
    let pipe = NSPipe()
    task.standardOutput = pipe
    task.standardError = pipe
    task.launch()
    task.waitUntilExit()
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
    print(output)

我没有收到任何错误,但没有任何反应。有人可以帮帮我吗?

【问题讨论】:

  • 请做一些研究。在 StackOverflow 上,您可以找到与 NSTask 相关的帖子,例如:thisthis。另外,请参阅 NSTask 类参考页面。
  • 谁告诉你我没有?,我来这里是因为我没有找到任何解决方案。

标签: swift macos


【解决方案1】:

这是对我有用的代码:

    let task = NSTask()
    task.launchPath = "/usr/bin/defaults"
    task.arguments = ["write","com.apple.dock","persistent-apps","-array-add","{\"tile-type\"=\"spacer-tile\";}"]
    let pipe = NSPipe()
    task.standardOutput = pipe
    task.standardError = pipe
    task.launch()
    task.waitUntilExit()

    let task2 = NSTask()
    task2.launchPath = "/usr/bin/killall"
    task2.arguments = ["Dock"]
    let pipe2 = NSPipe()
    task2.standardOutput = pipe2
    task2.standardError = pipe2
    task2.launch()
    task2.waitUntilExit()


    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
    print(output)

【讨论】:

    【解决方案2】:
    默认写 ... ;杀戮码头

    两个命令。当您在终端中键入此行时,它通过 到你的shell(通常是OS X上的“bash”),然后shell执行 两个命令顺序。

    另一方面,NSTask 只执行一个命令并执行 没有贝壳通常具有的魔力。在你的情况下 所有参数,包括最终的“killall Dock”,都作为 /usr/bin/defaults 的参数。

    一个可能的解决方案是依次执行 两个 NSTasks, 一个用于defaults 命令,一个用于killall 命令。

    【讨论】:

    • 好的,我会尝试并告诉你结果,谢谢伙计。
    • 感谢伙计,经过一些调整后它起作用了:D .. 我将发布代码作为答案。
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多