2017-06-28 44 views
0

我想寫一個簡單的應用程序來執行系統命令來使用MacOS的「Ping」功能。我試圖執行命令「ping -c 1 -S ethernetIP www.google.com」如何在沒有[]括號的情況下顯示函數的輸出?

我希望系統通過以太網適配器專門ping google.com一次,並提供ping結果。

當我扎EthernetIP()和outPing()函數來的按鈕並單擊它我得到以下輸出:

[ 「17.104.78.250」]

平:綁定:無法分配請求的地址 [「」]

我看到EthernetIP()函數正在生成括號[]中的系統以太網接口IP地址。這似乎導致ping功能發生故障,因爲輸入pingOut()函數似乎是:

「ping -c 1 -S [」17.104.78.250「] www.google.com」

我想它喂外殼ping命令該行:

「平-c 1 -S 17.104.78.250 www.google.com」

我怎麼能有這樣的來自以太網IP查詢的字符串在引用時不包括括號和引號outPing()?

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

我看到EthernetIP()函數產生括號內的系統以太網接口的IP地址[]

做,因爲你聲明的返回值作爲數組([String] )並且將輸出分割成行中的段落

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

如果您不想要排列y寫

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 
} 
+0

感謝Vadian!這就是它!這個社區太棒了! – jefenater

相關問題