gpt4 book ai didi

swift - 使用 Swift 打开(交互式)终端

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

我正在尝试使用 Swift 打开终端并从那里运行 python 脚本。我发现这个函数可以做到这一点:

( Get terminal output after a command swift )

    func runCommand(cmd : String, args : String...) -> (output: [String], error: [String], exitCode: Int32) {

var output : [String] = []
var error : [String] = []

let task = NSTask()
task.launchPath = cmd
task.arguments = args

let outpipe = NSPipe()
task.standardOutput = outpipe
let errpipe = NSPipe()
task.standardError = errpipe

task.launch()

let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
output = string.componentsSeparatedByString("\n")
}

let errdata = errpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(errdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
error = string.componentsSeparatedByString("\n")
}

task.waitUntilExit()
let status = task.terminationStatus

return (output, error, status)
}

我正在调用该函数,就像问题中所写的那样:

let output =  runCommand("/usr/bin" , args: "python " + folderPath + selecteditem)

args 的打印是:“python/Users/michael/Documents/Python/testestest.py”

如果我将其粘贴到终端中,这是一个有效的命令。

但是 xCode 告诉我:无法 posix_spawn:错误 13

<小时/>

你建议我做什么?我不确定是否有更简单的方法来启动正在运行命令的可见控制台。我正在考虑的另一个问题是,在 xcode 中实时输出会很棒(意味着在 python 脚本仍在运行时查看输出)这可能吗?

谢谢

最佳答案

python/Users/michael/Documents/Python/testestest.py 在终端中工作,因为它被输入到/bin/bash 或其他 shell 解释器中。使用 NSTask 运行 shell 命令时,您有 2 个选项:

  1. 像在终端中一样使用 bash。

    runCommand(“/bin/bash”,参数:“-c”,“python”+folderPath+selecteditem)

  2. 直接调用可执行文件。

    runCommand("/usr/bin/python", args:folderPath + selecteditem)

如果您使用第二个选项,您必须确切地知道可执行文件在哪里,但从好的方面来说,您可以将每个参数作为单独的参数输入到 runCommand 函数中,并且不必担心在周围放置转义引号就像您对 bash 所做的那样。

关于swift - 使用 Swift 打开(交互式)终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314810/

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