如何在没有[]括号的情况下显示函数的输出?

时间:2017-06-28 18:51:21

标签: swift macos

我正在尝试编写一个简单的应用程序来执行系统命令以使用MacOS“Ping”功能。我正在尝试基本上执行命令“ping -c 1 -S ethernetIP www.google.com”

我希望系统专门通过以太网适配器ping google.com并提供ping结果。

当我将EthernetIP()和outPing()函数绑定到一个按钮并单击它时,我得到以下输出:

[ “17.104.78.250”]

ping:bind:无法分配请求的地址 [ “”]

我看到EthernetIP()函数正在括号[]中生成系统以太网接口IP地址。这似乎导致ping函数出现故障,因为正在输入pingOut()函数的内容似乎是:

“ping -c 1 -S [”17.104.78.250“] www.google.com”

我希望它能在这行提供shell ping命令:

“ping -c 1 -S 17.104.78.250 www.google.com”

当我在outPing()中引用它时,如何让以太网IP查询中的字符串不包括括号和引号?

import Foundation

func runCmd(cmd : String, args : String...) -> ([String]) {

var output : [String] = []

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

let outpipe = Pipe()
task.standardOutput = outpipe

task.launch()

let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String(data: outdata, encoding: .utf8) {
    string = string.trimmingCharacters(in: .newlines)
    output = string.components(separatedBy: "\n")
}

task.waitUntilExit()

return (output)

}

func EthernetIP()  {
let eIP = runCmd(cmd: "/bin/bash", args: "-c", "ipconfig getifaddr en0")
print(eIP)

}

func outPing() {

let pingip = runCmd(cmd: "/sbin/ping", args: "-c 1", "-S", "\(eIP)", "www.google.com" )
print(pingip)

}

1 个答案:

答案 0 :(得分:1)

  

我看到EthernetIP()函数在括号[]

中生成系统以太网接口IP地址

这样做是因为你将返回值声明为数组([String])并将输出拆分为行中的段落

output = string.components(separatedBy: "\n")

如果您不想要数组写

func runCmd(cmd : String, args : String...) -> String {

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

    let outpipe = Pipe()
    task.standardOutput = outpipe

    task.launch()

    let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
    guard let string = String(data: outdata, encoding: .utf8) else { return ""}
    let output = string.trimmingCharacters(in: .newlines)
    task.waitUntilExit()

    return output
}