【问题标题】:Running Shell Command in Swift在 Swift 中运行 Shell 命令
【发布时间】:2015-10-05 01:27:13
【问题描述】:

我正在尝试构建一个快速的 OSX 应用程序,该应用程序可以运行一些 shell 命令来挂载用户请求的 VPN。我尝试使用 NSAppleScript,但每次尝试以管理员权限运行时都会出错,因此我决定使用 NSTask 调用将以管理员身份运行并挂载 VPN 的苹果脚本。

为了调试让 shell 命令通过 NSTask 快速运行,我制作了一个测试脚本文件,其中只有一个简单的 whoami 命令,当我在脚本编辑器和终端中使用 osascript /Users/amaloney/Desktop/test.scpt 运行它时,它可以工作

但是在我的 Swift 文件中

import Foundation

let task = NSTask();
task.launchPath = "/usr/bin/osascript"
task.arguments = ["/Users/amaloney/Desktop/test.scpt"]

task.launch()

我继续收到以下错误

脚本错误 -54。由于错误 -1700,无法获取错误文本。

关于如何让这个工作的任何想法?

谢谢!

供参考 - test.scpt

do shell script "whoami"

【问题讨论】:

  • 您是否在等待命令以task.waitUntilExit() 结束?
  • @Kametrixom 我也试过用它运行,同样的错误
  • @ThomasKilian 我已经仔细阅读过,该用户收到错误 -2741,但我不是。
  • 你试过用 bash 或 Perl 代替 Applescript 吗?

标签: macos swift shell applescript


【解决方案1】:

这些问题似乎与您代码的 AppleScript 部分有关:

  1. script error -54

    ↳ -54 文件权限错误

  2. Couldn't get error text because of error -1700.

    ↳ 不能将 ... 变成类型项。

很可能您的脚本尝试执行它无权执行的操作,并且还尝试分配错误的类型 — 没有看到脚本或不知道它做了什么。

【讨论】:

  • 我也怀疑这一点,但我似乎找不到我的脚本有任何问题 -- 执行 shell 脚本 "whoami"
  • 如果您想将AppleScript 与NSTask 一起使用,则该命令必须是绝对的:do shell script "/usr/bin/whoami"... whoami 实用程序无论如何都已过时,因此您可以将/usr/bin/id 与@ 一起使用987654328@,则不需要 AppleScript。
  • 我的最终目标不是使用 whoami,这只是一个简单的测试。我的计划是从我的 swift 应用程序中执行一些 jamf 命令
  • 大多数NSTasks 可以类似地工作;希望这能让您更好地了解流程。
【解决方案2】:

我在 Xcode Playground 中运行它,这显然是问题的根源。一旦我继续将此代码集成到我的 OSX 应用程序中,它就可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2014-06-26
    • 1970-01-01
    • 2014-04-30
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多