【问题标题】:How to display output of a function without [ ] brackets?如何显示没有 [ ] 括号的函数的输出?
【发布时间】:2017-06-29 05:48:17
【问题描述】:

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

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

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

["17.104.78.250"]

ping:绑定:无法分配请求的地址 [""]

我看到 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)

}

【问题讨论】:

    标签: swift macos


    【解决方案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
    }
    

    【讨论】:

    • 感谢瓦迪安!明白了!这个社区太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多