gpt4 book ai didi

macos - NSTask字符串语法问题

转载 作者:行者123 更新时间:2023-11-30 10:14:52 25 4
gpt4 key购买 nike

我试图在我的 swift 应用程序中按下按钮时运行以下终端命令,但似乎无法弄清楚字符串语法。

peerflix "magentlinkhere" --vlc

我希望 Magnetlinkhere 和 --vlc 成为我可以输入 NSTask 的变量。

我目前拥有的功能是这样的:

var videoPlayer = "vlc"
var torrentS = "magnetlinkhere"

func openVideo() {
let openApp = NSTask()
openV.launchPath = "/bin/bash"
openV.arguments = ["peerflix "\("torrentS.stringValue")\" --"\(videoPlyer)"]
openV.launch()
}

此代码应在终端中执行以下内容

peerflix "magnetlinkhere" --vlc

谁能帮我格式化一下吗?谢谢:)

最佳答案

首先,当您将整个命令字符串传递给 bash(或更典型的是 sh)时,您需要使用 -c 选项。命令字符串实际上是 -c 选项的一部分,而不是参数本身。因此,这应该是参数数组的第一个元素。

就引用而言,您可以尝试以下操作:

openApp.arguments = ["-c", "peerflix \"\(torrentS)\" --\(videoPlayer)"]

但是,这很危险。 shell 将解释您传递的命令字符串。如果它具有 shell 认为特殊的字符,它可能会执行各种操作,包括运行命令。在第一个参数周围加引号还不够。一方面,如果您的任何一个变量包含引号,这将干扰您尝试执行的引用。另一方面,某些特殊字符(例如 $)仍然在引号内解释。

您可以尝试改进引用并进行一些反斜杠转义,以尝试使字符串免受 shell 解释的影响。然而,更安全的选择是跳过 shell 并直接执行程序并提供其参数。

例如:

let task = NSTask()
task.launchPath = "peerflix" // actually need the absolute path here
task.arguments = [torrentS, "--\(videoPlayer)"]
task.launch()

唯一的复杂之处是您实际上需要提供 peerflix 可执行文件的绝对路径。您不能依赖它在 PATHNSTask 中找到它。 (坦率地说,你根本不能依赖它的安装。所以,我假设你必须将它与你的应用程序或其他东西一起发布。在这种情况下,你应该通过在你的包中查找它来获取路径。)

关于macos - NSTask字符串语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30746557/

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